5
m3ph1st0sのプログラミングパズル3(C):「簡単なバグ」[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックコードゴルフスタックExchange用。 4年前に閉鎖されました。 これは私のシリーズのC / C ++パズルの3番目です。最初の2つを見逃した場合、それらはここにあります:(1)m3ph1st0sのプログラミングパズル1(C ++) (2)m3ph1st0sのプログラミングパズル2(C ++): "Call hard!" 私のパズルは100%オリジナルだと言わなければなりません。そうでない場合、私は常にテキストでそう述べます。私の3番目のパズルには、次の2つの部分があります。 パズル3.1 この部分(3.1)は私のオリジナルのパズルではなく、私が少し前に読んだインターネットのページから集められたものです。ここであなたの出発点とウォームアップとしてそれを使用します。これを解決してから、2番目の部分に進みます。 誰かが「+」記号を20回印刷しようとして、次のプログラムを思いつきました。 #include <stdio.h> int main() { int i; int n = 20; for( i = 0; i < n; i-- ) printf("+"); return 0; } 期待した結果が得られなかったという事実は明らかです-プログラムは終了しません。修理する!簡単?ここで、1文字のみを変更してプログラムを修正します-もちろんスペース以外の文字です!この課題には3つの解決策があります。3つすべてを見つけます。明確にするために、プログラムは20個の「+」記号を出力し、高速で終了する必要があります。「高速」が何を意味するかを批判する前に、それはせいぜい数秒であることを言います(ちなみにそれは多すぎますが、それを明確にするためだけです)。 パズル3.2 EDITED これは、以前の3.2.2パズルのためのソリューションは、コンパイラに依存かもしれないことを私に指摘しました。主題に関する考えられる議論を排除するために、論争を引き起こさないように特別な注意を払うときに、アイデアを修正し、次のパズルでそれを改善します。ただし、このパズルを継続するために、3.2.2を少し修正します(ソリューションは簡単ですが、よりクリーンになります)。 パズルを初めて見たとき、私はそれがかなりすごいと思いました。私は何とかそれを解決しましたが、すぐにではなく、注意を払う必要がありました。あなたがここにいるなら、あなたもそれを解決したことを意味します。すべての可能な文字をすべての可能な値に置き換えて、すべてのソリューションをテストするプログラムを作成してこれを行った場合、あなたは失われます。一生懸命働いています。20個の「+」記号を書き込むプログラムを修正しました。 3.2.1:結果が有効で、修正された3つのプログラムすべてで同じものが出力されるように、コードに1文字だけを挿入します。言うまでもなく、この文字はmainを囲む}の前にある必要があります(プログラムの後に文字を入れただけで、コンパイラが非常に友好的だったのは聞きたくないからです)。 編集(以下を参照)-これらの最後の質問では、カウンターiが0ではなく-1から始まることを考慮してください。 3.2.1.5:出力が少なくとも19個の「+」記号であるという条件で、以前のすべての問題を繰り返します(ただし、出力は有限です)。スペースの変更は許可されています。これで、最初のケースよりも多くの解決策が見つかりました。これらのいくつかは、3.2.2の質問に最も確実に適合します。 3.2.2:別の値を選択して変数nを初期化し、結果の出力が3.2.1.5の少なくとも1つの修正されたプログラムで同じになるようにします(すべてのプログラムである必要はありません)。 …