プログラミングの基礎(擬似言語のトレース)
次の関数 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 にすると1つずれ、回文の「level」でも s[1] の「l」と s[4] の「e」を比べて false を返します。
- A. 正しい。i = 1 のとき s[n]、i = 2 のとき s[n − 1] と、後ろから i 番目の文字を指します。
- B. 1つずれて、後ろから i + 1 番目の文字と比べてしまいます。回文の「level」でも false になります。
- C. i = 2 で s[n + 1] となり、配列の範囲を超えてしまいます。