Fixing a broken loop by changing exactly one character

允我心安 提交于 2019-11-27 05:22:15

问题


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.

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.


回答1:


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("-");



回答2:


Change i-- to n-- is another.

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




回答3:


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.




回答4:


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

Changed i-- to n--




回答5:


Here's one of them, I think:

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



回答6:


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

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



回答7:


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.




回答8:


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


来源:https://stackoverflow.com/questions/2503376/fixing-a-broken-loop-by-changing-exactly-one-character

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!