开发者

Fixing a broken loop by changing exactly one character

Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.

I found a site with some complicated C puzzles. Right now I'm dealing with this:

The following is a piece of C code, whose intention was to print a minus sign 20 times. But you can notice that, it doesn't work.

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

Well fixing the above code is straight-forward. To make the problem interesting, you have to fix the above code, by changing exactly one character. There are three known solutions. See if you can get all those three.

开发者_如何学C

I cannot figure out how to solve. I know that it can be fixed by changing -- to ++, but I can't figure out what single character to change to make it work.


Here is one solution:

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

Here is a second one, thanks to Mark for helping me!

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

And Mark also had the third one which is

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


Change i-- to n-- is another.

Okay - Gab made the fix, so I removed the other solution. He wins!


Third answer:

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

Thanks to Gab Royer for inspiration.

Explanation: Eventually , i + n will result in -20 + 20 = 0 which is false.


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

Changed i-- to n--


Here's one of them, I think:

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


The comparison in the for loop can be any expression - you can negate i.

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


Solution 1

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

Solution 2

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

Haven't figured a third.


Here is another one:

#include <stdio.h>

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜