我发现a site有一些复杂的C谜题。现在我正在处理这个问题:
以下是一段C代码,其目的是打印减号20次。但你可以注意到,它不起作用。
#include <stdio.h> int main() { int i; int n = 20; for( i = 0; i < n; i-- ) printf("-"); return 0; }
修复上述代码非常简单。要使问题变得有趣,您必须通过更改一个字符来修复上述代码。有三种已知的解决方案。看看你能不能得到这三个。
我无法弄清楚如何解决。我知道可以通过将--
更改为++
来修复此问题,但我无法弄清楚要更改哪个单个字符才能使其正常工作。
答案 0 :(得分:34)
这是一个解决方案:
for( i = 0; -i < n; i-- )
printf("-");
这是第二个,感谢Mark帮助我!
for( i = 0; i + n; i-- )
printf("-");
马克也有第三个
for( i = 0; i < n; n-- )
printf("-");
答案 1 :(得分:17)
将i--
更改为n--
是另一个。
好的 - Gab做了修复,所以我删除了另一个解决方案。他赢了!
答案 2 :(得分:7)
第三个答案:
for( i = 0; i + n; i-- )
printf("-");
感谢Gab Royer的灵感。
说明:最终,i + n
将导致-20 + 20 = 0
false
。
答案 3 :(得分:2)
for( i = 0; i < n; n-- )
printf("-");
将i--更改为n -
答案 4 :(得分:0)
我认为这是其中之一:
for( i = 0; i < n; n-- )
答案 5 :(得分:0)
for循环中的比较可以是任何表达式 - 你可以否定i。
for (i = 0; -i < n ; i--)
答案 6 :(得分:0)
解决方案1
#include <stdio.h>
int main()
{
int i;
int n = 20;
for( i = 0; i < n; n-- ) // Change i-- to n--
printf("-");
return 0;
}
解决方案2
#include <stdio.h>
int main()
{
int i;
int n = 20;
for( i = 0; -i < n; i-- ) // Compare to -i
printf("-");
return 0;
}
没想到第三个。
答案 7 :(得分:-1)
这是另一个:
#include <stdio.h>
int main()
{
int i;
int n = -20; //make n negative
for( i = 0; i < n; i-- )
printf("-");
return 0;
}