程式設計基礎(虛擬碼追蹤)

下列程式以減法使兩個整數 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

這是以減法進行的歐幾里得演算法(輾轉相除法),反覆從較大的值減去較小的值,直到兩者相等。(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 的值。
練習這個領域 前往領域頁面

相關計算工具

程式設計基礎(虛擬碼追蹤)的其他題目

  1. 下列函式 isLeap 在西元 y 年為閏年時回傳 true。and 比 or 先計算。isLeap(y) 回傳 true 的 y 為下列何者?
  2. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 pow(2, 10) 呼叫下列函式 pow 時,pow 被呼叫的次數(含第一次呼叫)為下列何者?
  3. 以 s(7) 呼叫下列函式 s 時,回傳值為下列何者?
  4. 以 p(3) 呼叫下列程序 p 時,輸出的值的順序為下列何者?
  5. 以 fib(10) 呼叫下列函式 fib 時,回傳值為下列何者?