これは私のシリーズの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つの修正されたプログラムで同じになるようにします(すべてのプログラムである必要はありません)。
LAST EDIT1:元のテキストが「正確に」20個のサインを言わなかったため、21個の「+」サインを出力するようにプログラムを変更することは、依然として良い解決策です。ただし、無限出力は禁止されています。明らかに、これは禁止されていないため、すべてが何百もの「+」記号の出力を開始することを意味するものではありません。しかし、美しい21の出力を排除することは、この競争の精神ではありません。
LAST EDIT2:LAST EDIT1を検討し、スペースの変更を受け入れると、5つの可能な解決策があり、そのうち4つが既に回答で指摘されているようです。ただし、最後の課題には触れておらず、もう一度明確にする必要があります。nには別の値を割り当てる必要があります。一部のトリックで20からnを割り当てるソリューションでは実行できません(n = 20Lなど)。また、スペースを変更しない3番目のソリューションを参照することを好みます。
LAST EDIT3:最後の質問を編集しました。読んでください!
課題は、パズルの両方の部分を解決することです。最初にそれが勝ちます。
それがすべて明確であり、質問を投稿しないでください。できるだけ早く編集することを願っています。乾杯。 強調されたテキスト