プログラミングの基礎(擬似言語のトレース)

2つの整数 a、b を引き算で等しくしていく次のプログラムを実行した後の k の値はどれか。

整数型: a ← 48, b ← 18, k ← 0
while (a ≠ b)
  if (a > b)
    a ← a − b
  else
    b ← b − a
  endif
  k ← k + 1
endwhile
  1. A3
  2. B4
  3. C6
答えと解説を見る

正解:B. 4

大きい方から小さい方を引くことを、2つが等しくなるまで繰り返す、引き算によるユークリッドの互除法です。(a, b) は (48, 18) → (30, 18) → (12, 18) → (12, 6) → (6, 6) と変わり、引き算は4回なので k = 4 です。最後の a = b = 6 が最大公約数です。剰余(mod)を使う互除法なら、48 mod 18 = 12、18 mod 12 = 6、12 mod 6 = 0 の3回で済みます。

  • A. mod を使う互除法の繰返しの回数です。このプログラムは引き算を使います。
  • B. 正しい。(48, 18) から (6, 6) になるまでの4回です。
  • C. 最大公約数 a = b = 6 の値で、k の値ではありません。
この分野を解く 分野ページへ

関連する計算ツール

プログラミングの基礎(擬似言語のトレース)の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

プログラミングの基礎(擬似言語のトレース)のほかの問題

  1. 次の関数 isLeap は、西暦 y 年がうるう年なら true を返す。and は or より先に計算する。isLeap(y) が true を返す y はどれか。
  2. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 pow を pow(2, 10) として呼び出したとき、pow が呼ばれる回数(最初の呼出しを含む)はどれか。
  3. 次の関数 s を s(7) として呼び出したときの戻り値はどれか。
  4. 次の手続 p を p(3) として呼び出したとき、出力される値の並びはどれか。
  5. 次の関数 fib を fib(10) として呼び出したときの戻り値はどれか。