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++?
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.
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
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.
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();
}