こんにちは。ECF代表のヒガです。
本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q025 配列の内容を逆順に表示
配列に格納されたデータを配列の末尾から逆順に表示させてください。ただし、操作対象の配列はプログラムの先頭で宣言し、適当な初期値を代入してください。
初期値として {10, 20, 30, 40, 50} を使って整数型(Javaではint型)配列を準備した場合の実行例は次のとおりです。
配列の要素を1つずつ表示する方法もありますが、今回は繰り返しを使って実現させてください。
ヒント
繰り返しのカウンタ変数は、何も1ずつ増えていくだけが役割ではありませんでした。指定の値から1ずつ減らす書き方も可能です。具体例はQ018を参照してください。
解答例と解説
考え方
今回の繰り返す内容はQ024と同じく、
- 配列のデータ要素を表示する
ですが、配列の添字指定を末尾の要素から先頭の要素に向かう順で指定することで、目標の表示が実現できます。実行例で言えば、配列(要素数5)には0から4まで添字が付けられていますので、「4, 3, 2, 1, 0」の順で呼び出しを行う指定となっていればOKです。
配列の添字指定は繰り返しのカウンタ変数を使うと楽です。そこでQ018のカウントダウンアルゴリズムを改良することで実現させましょう。
箇条書きでまとめると、
- 次の動作を配列の最後の添字から最初の添字まで繰り返す(減る方向)
- 【カウンタ変数】番目のデータ要素を表示する
- 改行する
という流れになります。
フローチャート例
このフローチャートでは、配列の添字は「1」から始まるとしています。最後の要素の添字は配列の要素数と一致します。表示ループは、要素数から1まで(カウンタ変数iが1より小さくなったら終了)の繰り返しとなります。
Javaでの実装例
public class Q025 { public static void main(String[] args) { int[] a = {10, 20, 30, 40, 50}; // 操作対象配列の宣言と初期化 for (int i = a.length - 1; i >= 0; i--) { System.out.println(a[i]); } } }
Javaでは配列の添字は「0」からスタートしますので、カウンタ変数iの初期化や継続条件式は、上記のフローチャートからはそのように変更しています。配列の要素の添字は0から4(要素数 - 1)なので、【要素数 - 1】から0まで減る方向での5回の繰り返しです。
いつもの「カウントアップ方式」での繰り返しでアルゴリズムを作成することも可能です。別途対応表を作成し考えることで、カウンタ変数iと指定すべき添字の関係式がわかります。具体的には以下のとおりです。
for (int i = 0; i < a.length; i++) { System.out.println(a[a.length - i - 1]); }
おわりに
本連載(特にQ014以降)ですでに出てきたアルゴリズムのパターンに配列データを組み合わせることで、更に発展させたアルゴリズムを構築することができます。「まずはパターンを知ることが大事」というのが段々と直接的に感じられるようになってきたのではないでしょうか。
もし、本連載の演習がまだ1周目の皆さんは、焦らず最後までしっかりとアルゴリズムの各種パターンを確認するようにしましょう。そして2周目以降の皆さんは、各種パターンが定着し自力で応用できているか、いろいろな視点から確認してみましょう。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。