値が等しくなるアルゴリズム|科目A-1(応用情報技術者) 令和6年 春期午前試験 問5

出典:令和6年春期 午前 問5 分野:アルゴリズムとプログラミング / アルゴリズム
正の整数Mに対して,次の二つの流れ図に示すアルゴリズムを実行したとき,結果xの値が等しくなるようにしたい。aに入れる条件として,適切なものはどれか。
  • ア:n < M
  • イ:n > M - 1
  • ウ:n > M
  • エ:n > M + 1
解説

まず、左側の流れ図がどのような計算をしているか確認します。

「n:M, -1, 1」は、nをMから始めて1ずつ減らし、1になるまで繰り返すことを表します。そのたびに、

x ← x × n

を実行するので、最終的なxは、

x = 1 × M × (M - 1) × … × 2 × 1 = M!

となります。

右側の流れ図でも同じ結果にする必要があります。右側ではn = 1から始まり、まずxにnを掛け、その後でnを1増やします。

例えばM = 3の場合、次のように動作すればよいことになります。

n = 1:x = 1 × 1 = 1 → n = 2

n = 2:x = 1 × 2 = 2 → n = 3

n = 3:x = 2 × 3 = 6 → n = 4

ここで3までの乗算が終わっているので、nがMを超えた時点、つまり、

n > M

となったときに処理を終了すれば、左側と同じx = M!になります。

したがって、ウが適切です。

TSUNAGARU-ADVICE

まず押さえたいこと

左の流れ図では、nをMから1まで1ずつ減らしながらxに掛けているので、xには1からMまでの積が求められます。右の流れ図でも同じ結果にするには、nを1から順に増やしながら、Mまでの値を全て掛け終えたところでループを終了させる必要があります。

迷ったときの判断軸

右の流れ図では、先にx ← x * nを実行し、その後でnを1増やしてから終了条件を判定しています。そのため、条件式は「次に掛ける値がMを超えたか」という観点で考えると整理しやすくなります。判定のタイミングが加算の前か後かを見落とさないことが重要です。

科目Bにつなげるために

特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、流れ図を読むときに初期値、処理順序、更新処理、終了条件を順番に追う習慣を付けましょう。ループ条件の境界を1つずらしてしまうオフバイワンエラーの発見にもつながります。