这是我的C / C ++难题系列的第3个。万一您错过了前2个,则它们在这里:(1)m3ph1st0s的编程难题1(C ++) (2)m3ph1st0s的编程难题2(C ++):“辛苦!”
我必须说我的难题是100%原始的。如果没有,我将始终在案文中声明。我的第三个谜题分为以下两个部分:
拼图3.1
这一部分(3.1)并不是我的原始难题,它是从我前一段时间读过的一些互联网页面中收集的。我在这里以它为起点并为您热身。解决该问题,然后继续进行第二部分。
有人尝试打印“ +”号20次,并提出了以下程序:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
它没有达到预期结果的事实是显而易见的-该程序永无止境。修理它!简单?现在,通过更改“仅一个字符”来修复程序-当然不是空格字符!对于这一挑战,有3种解决方案。找到所有的三个。为了清楚起见:该程序必须输出20个“ +”号,并且必须快速结束。在就“快速”的含义批评我之前,我要说这最多意味着几秒钟(顺便说一下,这太多了,只是为了使它变得清晰起来)。
拼图3.2
编辑 前面曾指出,针对3.2.2难题的解决方案可能取决于编译器。为了消除对该主题的任何可能的讨论,当我会格外小心以免引起争议时,我将修改想法并在下一个难题中对其进行改进。但是,为了使这个难题继续下去,我将对3.2.2进行一些小的修改(该解决方案会更简单但更干净)。
当我第一次看到拼图时,我发现它很棒。我确实设法解决了这个问题,但没有立即解决,因为它需要仔细注意。如果您在这里,则意味着您也已解决它。如果您通过编写一个程序用所有可能的值替换所有可能的字符并测试每个解决方案来这样做,那么您将会迷失方向。努力工作的家伙。现在已更正了写20个“ +”号的程序:
3.2.1:在代码中插入一个字母,仅输入一个字母,以使结果有效,并在所有3个更正的程序中输出相同的内容。不用说,字母必须在main的}之前(我之所以这么说是因为我不想听到有人只是在程序后加上字母,并且他们的编译器非常友好)。
编辑(请参见下面)-对于这些最后的问题,请考虑将计数器i从-1而不是0开始。
3.2.1.5:重复所有先前的问题,条件是输出至少为19个“ +”号(但仍为有限输出)。允许更改空间。现在,您可能会发现比第一种情况更多的解决方案。其中某些将绝对适合3.2.2问题。
3.2.2:选择另一个值以初始化变量n,以便对于3.2.1.5中的至少一个更正程序,结果输出将保持相同(不一定对所有程序都相同)。
上次编辑1:更改程序,使其输出21个“ +”符号仍然是一个很好的解决方案,因为原始文本没有说“准确” 20个符号。但是,无限输出是禁止的。显然,这并不意味着我们所有人都开始输出数百个“ +”符号,因为这是禁止的。但是消除美好的21项输出并不是本次比赛的精神。
LAST EDIT2:考虑LAST EDIT1并接受空间更改,看来我们现在有5个可能的解决方案,其中四个已经在响应中指出。但是,最后一个挑战还没有触及,我必须再次澄清:必须为n分配另一个值,通过一些技巧将20分配给n的解决方案不会这样做(例如n = 20L)。我也更喜欢看到不改变空格的第三个解决方案。
最后编辑3:我已经编辑了最后一个问题,请阅读!
挑战在于解决难题的两个部分。第一个这样做的人获胜。
我希望一切都清楚了,如果没有,请发表任何问题,我会尽快进行编辑。干杯。 强调文字