こんにちは。ECF代表のヒガです。
本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q018 指定の数から1まで縦に表示
複数行にわたり1以上の指定の数から1までを降順(大きい数から減っていく順番)に表示してください。いわゆるカウントダウンです。ただし、最初の数はプログラムの先頭で変数に代入することで指定してください。
「10」を指定した場合の実行例は次のとおりです。
ヒント
Q014ではカウントアップを行っていましたので、その逆です。つまり、繰り返し文のカウンタ変数が1ずつ減っていくように設定します。
解答例と解説
考え方
まず最初に「何を繰り返す」かを考えます。今回の場合は
- 数を表示する(改行有り)
を繰り返すことになります。表示対象の数は、今回の場合は指定の数から1まで1ずつ減らした数ですね。
ところで、ここまではカウンタ変数は増えることしかありませんでしたが、減らしても(カウントダウンしても)同じ様に使えます。その詳細はフローチャートで確認するとして、このカウントダウン方式を使って繰り返しのカウンタ変数を制御すれば、その値がそのまま使えます。箇条書きでまとめると、
- 最初の数を指定する(変数に代入する)
- 次の動作を指定の数から1まで繰り返す
- カウンタ変数の値を表示する
- 改行する
という流れになります。
フローチャート例
Q014との違いは「変数iの初期化でnを代入している」「表示ループの終了条件式が『i < 1』となっている」「表示ループ内の増分式が『i - 1 → i』となっている」の3点です。これでnから1までのカウントダウン方式での繰り返しが行なえます。表示自体は変数iをそのまま使うだけです。
繰り返し文は「初期値」「終了値(終了条件)」「増分式」を調整すれば、いろいろなアルゴリズムに応用できます。
Javaでの実装例
public class Q018 { public static void main(String[] args) { int n = 10; // 表示の初期値 for (int i = n; i >= 1; i--) { // 1ずつ減らす System.out.println(i); } } }
上のフローチャートとの対応からプログラム実装例の流れを確認しましょう。あわせて、改めてfor文の「初期値」「継続条件」「増分式」の使い方を確認しましょう。
では、これまでの本連載での演習で行ってきたような「カウントアップ方式」の繰り返しで今回のアルゴリズムを実現することは可能でしょうか。
いつものように対応表を作成し、カウンタ変数iを使った換算式を考えれば問題ありません。プログラム実装例は以下のようになります。
public class Q018_2 { public static void main(String[] args) { int n = 10; // 表示の初期値 for (int i = 1; i <= n; i++) { // ループはいつもと同じ System.out.println(n - i + 1); // 計算で求める } } }
おわりに
これまで紹介してきたアルゴリズムのパターンにおいて、ループのカウンタ変数は「指定の数まで1ずつ増やす」のみでした。しかし文法上は「変数に初期値を代入」「継続(終了)条件式を決める」「増分式(変数を変化させる代入式)を決める」というだけなので、その形式にさえ合っていれば、カウンタ変数はどういう変化のさせ方をしてもかまいません。
「指定の数まで1ずつ増やす」の他、「1ずつ減らす」「5ずつ増やす」「マイナスになるまで減らす」など、実現したいアルゴリズムにとって便利なカウンタ変数の変化のさせ方を考えましょう。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。