web-dev-qa-db-fra.com

Impression de 1 à 1000 sans boucle ni condition

Task: Imprime les nombres de 1 à 1000 sans utiliser d'instructions de boucle ou conditionnelles. Ne vous contentez pas d’écrire l’instruction printf() ou cout 1000 fois.

Comment feriez-vous cela en utilisant C ou C++?

323
Saurabh Gokhale

Je ne pense pas que ce soit une "question piège". . . "?:" n'est pas une condition, c'est un opérateur.

Utilisez donc la récursivité et l'opérateur?: Pour détecter quand arrêter?

int recurse(i)
{
   printf("%d\n", i);
   int unused = i-1000?recurse(i+1):0;

}

recurse(1);

Ou dans le même esprit pervers. . . la deuxième clause d'une condition "&" n'est exécutée que si la première valeur est vraie. Donc, recurse quelque chose comme ceci:

i-1000 & recurse(i+1);

Peut-être l'intervieweur considère-t-il une expression plutôt qu'un conditionnel.

0
Frank Merrow

Vous pouvez utiliser System() pour imprimer 1 à 1000 (avec à l'aide de la commande DOS)

 include <process.h>
 void main()
 {
     system("cmd.exe /c for /l %x in (1, 1, 1000) do echo %x" );
 }

Exécuter . Exe (exécutable) fichier de votre programme qui affiche 1 à 1000

REMARQUE: Testé sous Windows

0
Javed Akram

Je ne vais pas écrire le code mais juste l'idée. Que diriez-vous de faire un fil qui imprime un nombre par seconde, puis qu'un autre thread tue le premier fil après 1000 secondes?

remarque: le premier thread génère des nombres par récursion.

0
Kay Chan

je pense que ce code fonctionne parfaitement bien et qu'il est facile à comprendre, vous pouvez imprimer n'importe quel type, de 1 à 100 ou 1 jusqu'au dernier. il suffit de le mettre dans i et de le transférer pour appeler la fonction.

int main()
{
    int i=1;
    call(i,i);
}

void call(int i,int j)
{
    printf("%d",i);
    sleep(1); // to see the numbers for delay
    j /= (j-1000);

    j = ++i;

    call(i,j);
}

alors, quand j est égal à 1000, il se divise par zéro et il quitte directement le programme, c'est mon idée d'imprimer les nombres

ou un code beaucoup plus simple ..

int main()
{
    static int i = 1;
    static int j = 1;
    printf("%d", i);
    sleep(1);
    j = ++i;
    j /= (j-1000);
    main();
}
0
jack