こんにちは。ECF代表のヒガです。
本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q021 3の倍数のときのみ?を表示しながら1から指定の数まで表示
1から指定の数までの数字をカンマ(,)区切りで表示してください。ただし、3の倍数のときのみ文字「?」を表示してください。また、最後の数はプログラムの先頭で変数に代入することで指定してください。
「20」を指定した場合の実行例は次のとおりです。
「3」「6」「9」「12」「15」「18」の表示タイミングで文字「?」が表示されています。
ヒント
実行例を見ると最後にカンマがついていないので、Q020がベースとなります。さらに、繰り返しの中で倍数かどうか判断するアルゴリズムはQ017を参考にしましょう。
解答例と解説
考え方
まず最初に「何を繰り返す」かを考えます。今回の場合、基本的には
- 数とカンマを表示する(改行無し)
を繰り返すことになります。
カンマの表示に関してはQ020を参考にしてください。
さらに、数の表示に関しては、3の倍数のときは数ではなく文字'?'を表示させることになります。繰り返しの中で「○の倍数のときに△△する」というアルゴリズムは、Q017が参考になります。
今回の場合は
- 3の倍数の場合、文字'?'を表示する
- 3の倍数でない場合、数を表示する
の繰り返しです。3の倍数かどうかを判断するには、その数を3で割った余りが0かそれ以外かを確認します。
以上を箇条書きでまとめると、
- 最後の数を指定する(変数に代入する)
- 次の動作を1から指定の数まで繰り返す
- カウンタ変数の値が3の倍数となっているか判断する
- 3の倍数の場合、文字'?'を表示する
- 3の倍数でない場合、カウンタ変数の値を表示する
- カウンタ変数の値が最後の数(指定の数)か判断する
- 最後の数でない場合、カンマを表示する
- カウンタ変数の値が3の倍数となっているか判断する
という流れになります。
フローチャート例
2つの条件分岐が繰り返される構成になっています。内容はQ017とQ020のアルゴリズムの組み合わせです。
Javaでの実装例
public class Q021 { public static void main(String[] args) { int n = 20; // 表示の最大値 for (int i = 1; i <= n; i++) { if (i % 3 == 0) { // 3の倍数か System.out.print('?'); } else { System.out.print(i); } if (i != n) { // 最後の表示でないか System.out.print(','); // カンマを表示 } } } }
上のフローチャートとの対応からプログラム実装例の流れを確認しましょう。
おわりに
繰り返しの対象で、条件分岐が2つ必要なパターンのアルゴリズムでした。
条件分岐であっても、それぞれ一つのまとまりだと見なせば、「数(または?)を表示するまとまり」と「カンマを表示するまとまり」の2つのまとまりを繰り返している、という理解の仕方ができます。
プログラムやフローチャートが長くなると理解が難しいと感じるかもしれませんが、このまとまりを見つけて言葉で表すという作業は全体の理解を助けます。特に基本情報技術者試験のようにアルゴリズムを読み解く問題を解答していくときには必須のテクニックです。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。