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

时间:2010-03-23 20:31:53

标签: c puzzle code-golf

我发现a site有一些复杂的C谜题。现在我正在处理这个问题:

  

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

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

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

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

8 个答案:

答案 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;
}