C语言谜题[关闭]
Posted
技术标签:
【中文标题】C语言谜题[关闭]【英文标题】:C language puzzle [closed] 【发布时间】: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 面临的实际问题,只是他们为娱乐而发布的一个谜题。
【参考方案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 天后发布的答案的含义是什么?与我的答案相比,这并没有增加任何新内容?!以上是关于C语言谜题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章