程式設計基礎(虛擬碼追蹤)
下列函式 isPal 在字串型陣列 s 的字元排列無論從前或從後讀都相同(回文)時回傳 true。陣列的元素編號從1開始。程式中的【a】應填入下列何者?
○邏輯型: isPal(字串型陣列: s)
整數型: n ← s的元素數
for (i 從 1 到 n ÷ 2 每次加 1)
if (s[i] ≠ s[【a】])
return false
endif
endfor
return true
- An − i + 1
- Bn − i
- Cn + i − 1
查看答案與解析
正確答案:A. n − i + 1
第 i 個字元要與從後面數來第 i 個字元比較。從後面數來第1個是 s[n],第2個是 s[n − 1],因此從後面數來第 i 個是 s[n − i + 1]。只比較前半即可:n = 5 時 n ÷ 2 = 2.5,因此 i = 1、2 時分別比較 s[1] 與 s[5]、s[2] 與 s[4](中間的 s[3] 不必比較)。若填 n − i 就會差一,即使是回文「level」,也會比較 s[1] 的「l」與 s[4] 的「e」而回傳 false。
- A. 正確。i = 1 時指向 s[n],i = 2 時指向 s[n − 1],也就是從後面數來第 i 個字元。
- B. 差了一,會與從後面數來第 i + 1 個字元比較。即使是回文「level」也會得到 false。
- C. i = 2 時成為 s[n + 1],超出陣列的範圍。