戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2022年 79


問題文

流れ図で示す処理を終了したとき、xの値はどれか。
ITパスポート 2022年  問79の問題画像

選択肢

0
14(正解)
28
56

🔒 解説は解答すると表示されます

流れ図で示す処理を終了したとき、xの値はどれか。【ITパスポート 解説】

正解の理由

この流れ図は「x と y を比較して大きい方から小さい方を引く」操作を繰り返しています。初期値は x = 98、y = 42 です。ループは「x = y」になったときに終了する(注記より)ため、最終的には x と y が等しくなります。こうした「引き算を繰り返して最終的に等しくなる値」は 98 と 42 の最大公約数(最大で共通の割り切れる数)になります。98 と 42 の最大公約数は 14 なので、終了時の x の値は (14)になります。
(補足用語)
  • フローチャート(流れ図:処理の手順や分岐を図で表したもの)
  • 最大公約数(gcd:Greatest Common Divisor、共通して割り切れる最大の整数)
  • ユークリッドの互除法(Euclidean algorithm:最大公約数を求める古典的な方法)

解法ステップ

  1. 初期化:x = 98、y = 42。
  2. ループ条件:ループは「x = y」になったら終了する(等しくなければ繰り返す)。
  3. 各ループ内の処理:
    • 判定(x : y)で比較。判定の右分岐に「≦」とあるので「x ≤ y」のときは y := y - x(y に y - x を代入)。
    • 判定の下(左へ出る経路)に「>」とあるので「x > y」のときは x := x - y。
  4. これを繰り返すことで(引き算により)値が徐々に小さくなり、やがて x = y になる。最終値は 98 と 42 の最大公約数 14。
具体的な反復(簡潔な表)
  • 初期: (x, y) = (98, 42)
  • 98 > 42 → x := 98 - 42 = 56 → (56, 42)
  • 56 > 42 → x := 56 - 42 = 14 → (14, 42)
  • 14 ≤ 42 → y := 42 - 14 = 28 → (14, 28)
  • 14 ≤ 28 → y := 28 - 14 = 14 → (14, 14) → ここで x = y → ループ終了 結果:x = 14
(短いコードで確認)
x, y = 98, 42
while x != y:
    if x <= y:
        y = y - x
    else:
        x = x - y
print(x)  # 14

選択肢別の誤答解説

  • ア: 0
    0 になることはない。両方が 0 になるには片方がもう片方で割り切れて 0 になるような操作が必要だが、このアルゴリズムではゼロが生成されない(必ず正の差をとる)。また最大公約数が 0 になるのは双方が 0 の場合のみ。
  • : 14
    正しい。上の反復で示した通り、最終的に x = y = gcd(98, 42) = 14 になる。
  • ウ: 28
    28 は途中で y に現れる値の一つ((14,28) の状態)があるため迷いやすい選択肢です。しかしループは x = y になるまで続くので、最終的な値は 14 になります。28 は終端ではない。
  • エ: 56
    56 も途中の値((56,42))として現れますが、最終ではありません。途中と終了の区別ができていないミスです。

よくある誤解

  1. 判定の向きを読み間違える
    • 「x : y」と書かれた判定で、右側に「≦」とあることを見落としがちです。これを「x < y」と誤解すると処理が変わります。流れ図の分岐ラベル(≦ や >)を正確に読むことが重要です。
  2. 終了条件を「どちらかが 0 になること」と誤認する
    • この図では注記に「ループ端の条件は、終了条件を示す」とあり、ループ端には「x = y」と明示されています。ゼロになるかを探すのではなく「等しくなること」が終了条件です。
  3. 割り算で考えてしまう
    • 引き算の繰り返しで最大公約数を求める方法(ユークリッドの引き算版)になっている点を理解しないで、途中で割り算や別の操作を想定してしまう人がいます。流れ図に書かれた操作通りに進めてください。

補足コラム

この流れ図は「ユークリッドの互除法(引き算版)」の一種です。ユークリッドの互除法にはもう一つ高速な形があり、それは「引き算の代わりに剰余(%)を使う」方法です。つまり通常は次のようにして最大公約数を効率よく求めます:
  • while y != 0: x, y = y, x % y この方法は引き算を繰り返すより速く収束しますが、考え方(最終的に最大公約数を得る点)は同じです。初学者にとっては、今回の問題の流れ図で示された手順を追うことが理解の助けになります。

FAQ

Q1. どうして最終値が最大公約数になるのですか?
A1. 引き算(大きい方から小さい方を引く)をしても、元の2数が共に割り切れる数(共通約数)は変わりません。差を取っても共通約数は保たれるため、最終的に二つの数が等しくなったとき、その値は元の2数の共通約数で、かつ最大の共通約数になります。
Q2. もし初期値が x = 42、y = 98 のように逆でも結果は同じですか?
A2. はい。同じです。比較と差の取り方があるため、順序が逆でも最終的には gcd(42,98) = 14 になります。
Q3. このアルゴリズムは必ず終了しますか?
A3. はい。各ステップでいずれかの変数が減少し、どちらも正の整数なので、いずれ等しくなり終了します。

関連キーワード: フローチャート、繰り返し処理(ループ)、条件分岐、最大公約数、ユークリッド互除法、変数代入、アルゴリズム理解
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について