通过改变一个字符来修复一个破碎的循环

我找到了一个有一些复杂的C拼图的网站 。 现在我正在处理这个问题:

以下是一段C代码,其目的是打印减号20次。 但你可以注意到,它不起作用。

#include  int main() { int i; int n = 20; for( i = 0; i < n; i-- ) printf("-"); return 0; } 

修好上面的代码是很简单的。 要使问题变得有趣,您必须通过更改一个字符来修复上述代码。 有三种已知的解决方案。 看看你能不能得到这三个。

我无法弄清楚如何解决。 我知道可以通过改变-- ++来修复它,但我无法弄清楚要改变哪个单个字符才能使它工作。

这是一个解决方案:

 for( i = 0; -i < n; i-- ) printf("-"); 

这是第二个,感谢马克帮助我!

 for( i = 0; i + n; i-- ) printf("-"); 

马克也有第三个

 for( i = 0; i < n; n-- ) printf("-"); 

i--改为n--是另一种。

好的 – Gab做了修复,所以我删除了另一个解决方案。 他赢了!

第三个答案:

 for( i = 0; i + n; i-- ) printf("-"); 

感谢Gab Royer的灵感。

说明:最终, i + n将导致-20 + 20 = 0 ,这是false

  for( i = 0; i < n; n-- ) printf("-"); 

将i--改为n--

我认为这是其中之一:

 for( i = 0; i < n; n-- ) 

for循环中的比较可以是任何表达式 – 你可以否定i。

 for (i = 0; -i < n ; i--) 

解决方案1

 #include  int main() { int i; int n = 20; for( i = 0; i < n; n-- ) // Change i-- to n-- printf("-"); return 0; } 

解决方案2

 #include  int main() { int i; int n = 20; for( i = 0; -i < n; i-- ) // Compare to -i printf("-"); return 0; } 

没想到第三个。

这是另一个:

 #include  int main() { int i; int n = -20; //make n negative for( i = 0; i < n; i-- ) printf("-"); return 0; }