问题
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