こんにちは。ECF代表のヒガです。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q023 九九表をきれいに表示
かけ算九九の表(答えのみ)を表示させてください。数と数の間は半角スペースで区切ります。
実行例は次のとおりです。
参考にQ022の九九表の実行例も再掲します。
Q022と違い、今回の実行例は数が縦にもきれいに並んでいることがわかります。このきれいな並びを実現させてください。
なお、各プログラム言語の標準ライブラリの機能で解決できることもあるのですが、ここではアルゴリズムを考える勉強ということで、「半角スペースの表示を自前で工夫する」という方針で解答を導いてください。
ヒント
Q022に少しだけ工夫したものです。具体的には半角スペースの入れ方に工夫があります。Q022の実行例をよく観察し、「なぜずれているのか」「どうスペースを補えばずれることがないのか」を考えましょう。
解答例と解説
考え方
かけ算九九を表示する基本的な考え方はQ022と全く同じなので、その辺りの解説は省きます。
違いは半角スペースの入れ方です。ここではその解説を行いましょう。
Q022の実行例やフローチャート、プログラムを見たときに、どうして縦の数がずれているのか、はしっかり理解できたでしょうか。かけ算の答えが1桁だけのときと、2桁になるときとが混在しているからですね。工夫なく区切りの半角スペースを1個付け加えているだけでは、やはりずれが生じてしまいます。
それではかけ算の答えが1桁のときは表示が2桁(2文字)となるように、数字の前にもう一つ半角スペースを付けましょう。「かけ算の答えが1桁の場合」、ということは条件分岐の出番となります。数の表示について、手順をまとめると
- かけ算の計算結果を求める
- 計算結果が1桁か判断する
- 1桁の場合、桁数調整用の半角スペースを1つ表示する
- 計算結果を表示する
という形になります。これで計算結果が2桁のときは2桁のまま、1桁のときは半角スペースを前にくっつけた2桁(2文字)での表示となります。繰り返し含めて全体をまとめてみましょう。
- 次の動作を1の段から9の段まで繰り返す
- 次の動作を列数の1から9まで繰り返す
- 段数×列番号の計算結果を求める
- 計算結果が1桁か判断する
- 1桁の場合、桁数調整用の半角スペースを1つ表示する
- 計算結果を表示する
- 区切り用の半角スペースを表示する
- 改行する
- 次の動作を列数の1から9まで繰り返す
という流れになります。
フローチャート例
かけ算の計算結果が1桁かどうかは、その値が10より小さいかどうかで判断します。
Javaでの実装例
public class Q023 { public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) { // iの段を表示する int ans = i * j; if (ans < 10) { // 計算結果が1桁なら System.out.print(' '); // 数字の前に半角スペースを埋める } System.out.print(ans); // 計算結果 System.out.print(' '); // 半角スペースで区切る } System.out.println(); // 行(iの段)が終われば改行 } } }
上のフローチャートとの対応からプログラム実装例の流れを確認しましょう。
おわりに
今回は二重ループとカウンタ変数を使った計算、そして条件分岐の組み合わせでした。変数も軽く駆使しないといけませんので、随分実践に近いアルゴリズムになってきました。
しかし、仕様(問題文)には「やりたいこと」は書いてありますが、「どうやればできる」は普通は書いてありません。今回の問題に関しても「半角スペースを追加で表示する」という解決策は、もはや実行例では目に見えないものです。そういうアルゴリズムはなかなか自力での構築が厳しくなります。
アルゴリズムを考えるには、とりあえず「こうやればできる」という方針を考えておくことが先に必要になってきます。これがパッと思いつくことができるように、本連載や関連サイト、書籍、所属会社の資産(先輩の経験)などを使って、いろいろなアルゴリズムに慣れ親しんでおく事が必要です。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。