問題1-10
変数levelは山の段数を表しています。
for文をネストして、次の図形を作成してください。
なお、山の左側には全角スペースを使用してください。
(実行結果は見やすさのため白い四角で表します)
【実行結果】
□ □ □ □ ■ □ □ □ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
【ForHiLevelPractice.java】
public class ForHiLevelPractice { public static void main(String[] args) { // 山の段数を表す変数 int level = 5; // for文の開始 } }
解答例
【ForHiLevelPractice.java】
public class ForHiLevelPractice { public static void main(String[] args) { // 山の段数を表す変数 int level = 5; // for文の開始 for(int i = 0; i < level; i++) { for(int j = 0; j < level + i; j++) { if(j < level - i - 1) { System.out.print(" "); } else { System.out.print("■"); } } System.out.println(); } // 別の解答例 for(int i = 0; i < level; i++) { for(int j = 0; j < level - i - 1; j++) { System.out.print(" "); } for(int j = 0; j < (i * 2) + 1; j++) { System.out.print("■"); } System.out.println(); } } }
解説
この問題は、非常に自由度の高い問題ですので、解答例も2パターン用意しました。
解答例以外の解き方もありますが、山の段数を表す変数levelの値を変化させてもきちんと綺麗な山が表示されるようにしてください。
このような問題で解き方を迷った場合には、紙とペンを用意して実際に図を書いてみるとひらめくケースが多いです。
たとえば、今回はlevel変数の値は5ですから、5段の山が表示されます。
その山を□と■を使って書いていきます。
□ □ □ □ ■ □ □ □ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
迷ったら、まず書き出す習慣はとても大事なのです。
書き出すことにより、ある法則性に気が付きます。
1番上の段は、□が4つ、■が1つ。
上から2段目は、□が3つ、■が3つ。
上から3段目は、□が2つ、■が5つ。
。。。。。。。。
つまり、□の数は4、3、2と一つずつ減っていき、■の数は1、3、5と2つずつ増えていきます。
これをfor文をネストして、ループ変数iとjで微調整しながら変化させていけば良いのです。
実務レベルでこのようなプログラムのアルゴリズムを考えることは本当にマレだと思います。
しかし、プログラマはこのようなパズル的な問題を、楽しんで取り組めるようになると良いでしょう。
そして、迷ったときは「紙とペン」を用意して、いろいろと書き出してみましょう。
きっと解決しますよ。
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】