• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:このアルゴリズムの解がわかりません。)

入れ子になった正方形を描くアルゴリズムとは?

このQ&Aのポイント
  • 正方形の入れ子構造を描くためのアルゴリズムについて学びましょう。
  • アルゴリズムの穴埋めや条件を理解することで、正方形の描画が可能になります。
  • 変数Lを用いて、枠の条件と文字の配置を確認しながらアルゴリズムを構築しましょう。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

懐かしいですね、応用情報かソフ開か何かの過去問でしょうか? ぱっと見た感じ、Iで行を、Jで列を数えて、(I,J)に"*"と" "とのどちらの記号が来るかどうか判定し、表示しているように見えます。(イ)と(ウ)が2回登場しているにも関わらず出力が反転している、というところが大きな見どころでしょうか。 偶数行と奇数行とで出力が裏返っているのは行の中央の部分ですので、(ア)と(エ)でそれぞれそれ以外の部分を必要なだけ書いてしまう必要がありそうです。 else節を見てのとおり、このアルゴリズムでは、条件に漏れた部分に特定の記号が書かれるようになっているため、その逆の記号を何処に書いてあげるか、という情報を条件に含める必要がありそうです。 つまり、 Iが奇数の時:条件漏れした部分に" "が書かれるため、何処に"*"を書くかを決めてあげます。 Iが偶数の時:条件漏れした部分に"*"が書かれるため、何処に" "を書くかを決めてあげます。 ・(ア)では、Jが奇数の時は"*"を書く ・逆に(エ)では、Jが偶数の時には" "を書く として、残った部分のうち逆の記号がかかれては困る中央部分について ・(イ)では、I<L/2の時に行の中央部分が何処かを示す(I<=J かつ J<=L-I+1) ・逆に(ウ)では、I>L/2の時に行の中央部分が何処かを示す(L-I<J かつ J<=I) とするのが良いのではないでしょうか?

noname#229108
質問者

お礼

ご回答ありがとうございます。 わかりやすく説明していただきやっと理解することが出来ました!

その他の回答 (1)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

http://ideone.com/JcNucf class Q8131606 { public static void main(String[] args) { int L = 11; int I = 1; while (I <= L) { int J = 1; while (J <= L) { if (I % 2 == 1) { if (J % 2 == 1) { System.out.print("*"); } else if (I <= L/2 && I < J && J <= L-I) { System.out.print("*"); } else if (L-I < J && J < I) { System.out.print("*"); } else { System.out.print(" "); } } else { if (J % 2 == 0) { System.out.print(" "); } else if (I <= L/2 && I < J && J <= L-I) { System.out.print(" "); } else if (L-I < J && J < I) { System.out.print(" "); } else { System.out.print("*"); } } J = J + 1; } System.out.println(); I = I + 1; } } }

noname#229108
質問者

お礼

お久しぶりです。 ご回答ありがとうございます! プログラムまで書いていただき、デバックできて分り易かったです! 本当にありがとうございました!

関連するQ&A