【问题标题】:C language puzzle [closed]C语言谜题[关闭]
【发布时间】:2021-11-27 17:58:54
【问题描述】:

我不确定这类问题在这里是否合适,但是... 通过更改(或添加)一个字符,使该程序打印 '*' 正好 20 次

void main(){
   int i, n=20;
   for (i=0; i<n; i--)
      printf("*");
}

有什么想法吗?

【问题讨论】:

  • 你有什么问题?这将打印 '*' 远远超过 20 次。更改为 i++ 使其打印 20 次。
  • 只能更改一个字符,将i--更改为i++需要两个字符
  • 提供的源代码调用 UB。在我的 Klingon 模拟器上,在 Waxing Crescent Thursdays(今天)上,它会打印 '*' 正好 20 次。
  • 我相信这样的问题比 Stack Overflow 更适合Code Golf
  • 我投票结束这个问题,因为它在任何地方都属于 Code Golf。这似乎不是 OP 面临的实际问题,只是他们为娱乐而发布的一个谜题。

标签: c for-loop syntax char substitution


【解决方案1】:

您的意思似乎是以下更改

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

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

这里将一个字符 i 替换为一个字符 n

另一种方法(如果拼图允许的话)是添加一个字符'-'like

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

注意:顺便注意,根据 C 标准,不带参数的函数 main 应声明为:)

int main( void )

【讨论】:

  • @Gendozz 如果您对答案感到满意,那么您可以选择它作为最佳答案,您的声誉将会增加。:)
【解决方案2】:

i++ 或 (i-- & n-=2 或任何其他大于 1 的正数)

【讨论】:

  • 这不满足单字符要求。请参阅 Vlad 的答案以了解该难题的正确解决方案。
【解决方案3】:

这很简单,只需将i-- 更改为n--

也许下一次更难的谜题? ;)

【讨论】:

  • 在问题和我的答案出现 4 天后发布的答案的含义是什么?与我的答案相比,这并没有增加任何新内容?!
猜你喜欢
  • 2018-06-22
  • 1970-01-01
  • 2017-07-31
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2017-08-04
  • 2011-03-10
相关资源
最近更新 更多