27

我发现了一个包含一些复杂 C 谜题的网站。现在我正在处理这个:

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

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

修复上面的代码是直截了当的。为了让这个问题变得有趣,你必须修正上面的代码,只改变一个字符。存在三种已知的解决方案。看看你能不能得到这三个。

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

4

8 回答 8

34

这是一种解决方案:

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

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

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

马克也有第三个,即

for( i = 0; i < n; n-- )
    printf("-");
于 2010-03-23T20:33:40.540 回答
17

更改i--n--另一个。

好的 - Gab 进行了修复,所以我删除了其他解决方案。他赢了!

于 2010-03-23T20:34:42.113 回答
7

第三个答案:

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

感谢 Gab Royer 的启发。

解释:最终,i + n将导致-20 + 20 = 0哪个是false

于 2010-03-23T20:43:09.877 回答
2
    for( i = 0; i < n; n-- )  
    printf("-");  

将 i-- 更改为 n--

于 2010-03-23T20:34:56.710 回答
0

这是其中之一,我认为:

for( i = 0; i < n; n-- )
于 2010-03-23T20:34:44.963 回答
0

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

for (i = 0; -i < n ; i--)
于 2010-03-23T20:38:01.980 回答
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;
}

第三个还没想好

于 2010-03-23T20:47:58.213 回答
-1

这是另一个:

#include <stdio.h>

int main()
{
    int i;
    int n = -20; //make n negative
    for( i = 0; i < n; i-- ) 
        printf("-");
    return 0;
}
于 2011-01-08T00:11:35.130 回答