程式設計基礎(虛擬碼追蹤)
為了把陣列 a 的元素反轉順序而寫了下列程式。陣列的元素編號從1開始。執行後 a 的內容為下列何者?
整數型陣列: a ← {1, 2, 3, 4, 5, 6}
整數型: n ← 6, t
for (i 從 1 到 n 每次加 1)
t ← a[i]
a[i] ← a[n − i + 1]
a[n − i + 1] ← t
endfor
- A{6, 5, 4, 3, 2, 1}
- B{6, 5, 4, 4, 5, 6}
- C{1, 2, 3, 4, 5, 6}
查看答案與解析
正確答案:C. {1, 2, 3, 4, 5, 6}
迴圈內的3行會交換 a[i] 與 a[n − i + 1] 的值。i = 1〜3 時前半與後半交換,暫時成為 {6, 5, 4, 3, 2, 1}。但終值是 n,所以 i = 4〜6 時又再交換一次 a[4] 與 a[3]、a[5] 與 a[2]、a[6] 與 a[1],回到原本的順序。要反轉順序,應把終值設為 n ÷ 2(n = 6 時為3),讓每一組只交換一次。
- A. 這是在 i = 3 停止時的結果。i = 4〜6 時會把同一組再交換一次。
- B. 這是不使用 t、只執行 a[i] ← a[n − i + 1] 時的結果。
- C. 正確。每一組都交換兩次,因此回到原本的順序。