私は、指定された K、対称線を x とし、その他のものを o とする KxK 正方形を出力するアルゴリズム (プレーンな ASCII で、派手な図は使用しない) をコーディングする割り当てを与えられました。ただし、K が偶数の場合は、x の 2 つの線を使用して、水平および垂直の対称線をマークします。さらに、ソース全体で 2 つ以上のループを使用することはできません。
だから私には2つのアイデアがあります。1 つ目は、各点が満たすべき座標を分析することです。各点について、与えられた (Kx, Ky) 点が x か o かを示す方程式が必要です。いくつかのスポットを x としてマークし、他のスポットを y としてマークして、すべての可能な (Kx, Ky) を介して、いくつかの if ループと while ループを交互に配置します。これには 1 つのループが必要です。
もう 1 つのアイデアは、非常に強引ですが、すべてのポイントを分析するわけではありませんが、文字列を連結するために使用する一連の変数を用意することです。説明させてください: "height" 変数をチェックする while ループが 1 つあります (各ターンで 1 ずつ減分します)。その内部では、1 つの while ループで構成される repeatString のカスタム メソッドを使用します (指定された文字列を乗算するだけです)。 t 回)。したがって、次のようなものがあります。
while(height):
if height==maxHeight OR ==0: print repeatString("x", maxWidth)
else if height is an element of markedKy (an array telling us which Ky's to mark as x'es as the whole): print repearString("x", maxWidth)
else print "x"+(howManySpaces*" ")+"x" ["xx" if even] + (howManySpaces*" ") +"x"
...等々。私が上に書いたことは、もちろん非常に大まかで、多くのケースをカバーしていません (実際、かなりのケースをカバーしています)。ただし、この 2 番目の方法は、コードを作成するのが非常に面倒です。これがいかにバグが発生しやすいかがわかります。
3番目の最良の方法はありますか?とても簡単に思えますが、他に何も理解できません。