次の記述中の 【 】に入れる正しい答えを,解答群の中から選べ。ここで, 配列の要素番号は 1 から始まる。
関数 makeNewArray は,要素数 2 以上の整数型の配列を引数にとり,整数型の配列
を返す関数である。関数 makeNewArray を makeNewArray({3, 2, 1, 6, 5, 4})として
呼び出したとき,戻り値の配列の要素番号 5 の値は 【 】となる。
〔プログラム〕
○整数型の配列: makeNewArray(整数型の配列: in)
整数型の配列: out ← {} // 要素数0の配列
整数型: i, tail
outの末尾 に in[1]の値 を追加する
for (i を 2 から inの要素数 まで 1 ずつ増やす)
tail ← out[outの要素数]
outの末尾 に (tail + in[i]) の結果を追加する
endfor
return out
解答群
ア 5 イ 6 ウ 9 エ 11 オ 12
カ 17 キ 21
問題解説
この問題では、プログラムの動作をシミュレーションして、makeNewArray({3, 2, 1, 6, 5, 4})
を実行したときに戻り値の配列 out
の要素番号 5 の値を求めます。
プログラムの動作
- 初期状態
out
は空の配列として初期化される:out ← {}
。in
は{3, 2, 1, 6, 5, 4}
。
- 最初の処理
out
の末尾にin[1]
の値(3)を追加:out ← {3}
。
- ループ処理
ループはi = 2
からi = 6
まで実行されます。- i = 2
tail ← out[outの要素数]
→tail = 3
(out
の末尾)。out
の末尾にtail + in[2]
を追加:out ← {3, 3 + 2} = {3, 5}
。
- i = 3
tail ← out[outの要素数]
→tail = 5
。out
の末尾にtail + in[3]
を追加:out ← {3, 5, 5 + 1} = {3, 5, 6}
。
- i = 4
tail ← out[outの要素数]
→tail = 6
。out
の末尾にtail + in[4]
を追加:out ← {3, 5, 6, 6 + 6} = {3, 5, 6, 12}
。
- i = 5
tail ← out[outの要素数]
→tail = 12
。out
の末尾にtail + in[5]
を追加:out ← {3, 5, 6, 12, 12 + 5} = {3, 5, 6, 12, 17}
。
- i = 6
tail ← out[outの要素数]
→tail = 17
。out
の末尾にtail + in[6]
を追加:out ← {3, 5, 6, 12, 17, 17 + 4} = {3, 5, 6, 12, 17, 21}
。
- i = 2
戻り値の配列
最終的な配列 out
は {3, 5, 6, 12, 17, 21}
。
答え
戻り値の配列の要素番号 5 の値は 17 です。
正解: カ 17