J’ai trouvé un site avec des énigmes C compliquées. En ce moment, j’ai affaire à ceci:
Ce qui suit est un morceau de code C, dont l’intention était d’imprimer un signe moins 20 fois. Mais vous pouvez remarquer que ça ne marche pas.
#include int main() { int i; int n = 20; for( i = 0; i < n; i-- ) printf("-"); return 0; }
Bien corriger le code ci-dessus est simple. Pour rendre le problème intéressant, vous devez corriger le code ci-dessus, en changeant exactement un caractère. Il existe trois solutions connues. Voyez si vous pouvez obtenir tous ces trois.
Je n’arrive pas à comprendre comment résoudre. Je sais que cela peut être corrigé en changeant --
en ++
, mais je ne peux pas déterminer quel caractère à changer pour que cela fonctionne.
Voici une solution:
for( i = 0; -i < n; i-- ) printf("-");
En voici une seconde, merci à Mark de m'avoir aidé!
for( i = 0; i + n; i-- ) printf("-");
Et Mark avait aussi le troisième qui est
for( i = 0; i < n; n-- ) printf("-");
Changer i--
en n--
est un autre.
D’accord – Gab a résolu le problème, alors j’ai retiré l’autre solution. Il gagne!
Troisième réponse:
for( i = 0; i + n; i-- ) printf("-");
Merci à Gab Royer pour son inspiration.
Explication: Finalement, i + n
donnera -20 + 20 = 0
ce qui est false
.
for( i = 0; i < n; n-- ) printf("-");
Changé i-- en n--
En voici un, je pense:
for( i = 0; i < n; n-- )
La comparaison dans la boucle for peut être toute expression – vous pouvez nier i.
for (i = 0; -i < n ; i--)
Solution 1
#include int main() { int i; int n = 20; for( i = 0; i < n; n-- ) // Change i-- to n-- printf("-"); return 0; }
Solution 2
#include int main() { int i; int n = 20; for( i = 0; -i < n; i-- ) // Compare to -i printf("-"); return 0; }
Je n'ai pas figuré un tiers.
En voici un autre:
#include int main() { int i; int n = -20; //make n negative for( i = 0; i < n; i-- ) printf("-"); return 0; }