【问题标题】:Fixing a broken loop by changing exactly one character通过只更改一个字符来修复损坏的循环
【发布时间】:2011-01-30 23:53:45
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我不认为这是“过于本地化”。虽然它在现实世界中可能不太有用,但它是一个有趣的谜题。
  • 顺便说一句,我们仍然缺少一个解决方案。
  • @Felix:好吧,当然我们现在不这样做了。我当时写的。

标签: c puzzle code-golf


【解决方案1】:

这是一种解决方案:

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

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

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

马克还有第三个,就是

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

【讨论】:

  • 第二个不行。你会得到-20, -21, -22,...。但是i + n 应该这样做。
  • 我认为第二个需要i+n 而不是i-n,你有它。不错。
  • 你是对的!我确信它与此有关,但在此过程的早期就放弃了希望:P
  • 第二个太棒了。谢谢你。还要感谢 Mark,他显然贡献了很多。
【解决方案2】:

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

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

【讨论】:

  • @Gab:嘿-我很高兴,因为你用你的方法打败了我一分钟 :)
  • 我接受了另一个答案,因为它包含所有三种解决方案,但非常感谢。
  • @Javier:很好的决定。 Gab 在我之前想到了两个。有趣的问题。
【解决方案3】:

我认为这是其中之一:

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

【讨论】:

    【解决方案4】:
        for( i = 0; i < n; n-- )  
        printf("-");  
    

    将 i-- 更改为 n--

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        第三个答案:

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

        感谢 Gab Royer 的启发。

        解释:最终,i + n 将产生-20 + 20 = 0,即false

        【讨论】:

          【解决方案7】:

          解决方案 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;
          }
          

          还没有想到第三个。

          【讨论】:

            【解决方案8】:

            这是另一个:

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

            【讨论】:

            • 这永远不会运行,因为 0 > 20。循环中的条件永远不会为真。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-15
            • 2018-04-25
            • 2016-07-29
            • 1970-01-01
            相关资源
            最近更新 更多