流れ図で示す処理を終了したとき,x の値はどれか。 開始 ↓ x を 98 とする ↓ y を 42 とする ↓ 繰返し(x = y)(注) ↓ (分岐)x : y ・「>」の場合: x - y の計算結果を新たな x とする ・「≦」の場合: y - x の計算結果を新たな y とする ↓ 繰返し ↓ 終了 (注)ループ端の条件は,終了条件を示す。
令和4年度 ITパスポート試験 問79
この問題の解説と、これまでの解答の記録です。
問79
頻出度★★☆
解説
問 79ループ端(繰返し)に付いた(注)は「終了条件」を表す
不正解ア
x が 0 になることはない。この処理は割り算の余りを 0 にする手順ではなく、両者が等しくなるまで大きい方から小さい方を引く互除法なので、最後は最大公約数 14 で止まり、0 には到達しない。
- イ
正解 この流れ図は、減算だけを用いたユークリッドの互除法で 98 と 42 の最大公約数を求める処理である。(注)より繰返しは x = y になったときに終了する。分岐 x : y では、x > y のとき x に x - y を、x ≦ y のとき y に y - x を代入する。x = 98、y = 42 から順に追うと、まず 98 > 42 なので x = 98 - 42 = 56、次に 56 > 42 なので x = 56 - 42 = 14、次は 14 ≦ 42 なので y = 42 - 14 = 28、続いて 14 ≦ 28 なので y = 28 - 14 = 14 となり、ここで x = y(14 = 14)が成り立って終了する。したがって終了時の x の値は 14 で、イが正しい。
不正解ウ
28 は途中で y に代入される値(42 - 14 = 28)であって、問われている x の値ではない。しかも処理はここで終わらず、さらに y = 28 - 14 = 14 まで続く。
不正解エ
56 は 1 回目の計算で x に入る途中経過の値(98 - 42 = 56)にすぎない。この時点ではまだ x = y に達しておらず繰返しは終了しないので、最終値ではない。
ここがポイント
- ループ端(繰返し)に付いた(注)は「終了条件」を表す。x = y になったら繰返しを抜ける、という読み方を正しく押さえることが前提になる。
- 本問は減算型ユークリッドの互除法で、大きい方から小さい方を引く操作を繰り返し、98 と 42 の最大公約数 14 を求めている。初期値から分岐と代入を 1 手ずつ丁寧に追跡するのがポイント。
用語