関数convertは,整数型の配列を一定のルールで文字列に変換するプログラムである。
関数convertをconvert(arrayInput)として呼び出したときの戻り値が“AABAB”になる引数arrayInputの値はどれか。
ここで,arrayInputの要素数は1以上とし,配列の要素番号は1から始まる。
〔プログラム〕
○文字列型: convert(整数型の配列: arrayInput)
文字列型: stringOutput ← "" // 空文字列を格納
整数型: i
for (i を 1 から arrayInput の要素数 まで 1 ずつ増やす)
if (arrayInput[i] が 1 と等しい)
stringOutput の末尾 に "A" を追加する
else
stringOutput の末尾 に "B" を追加する
endif
endfor
return stringOutput
正答4
解説
正解は4です。
擬似言語のプログラムをたどり、戻り値が“AABAB”になる配列を選ぶ問題です。
関数convertは、配列の要素を先頭から順に調べ、要素が1なら"A"、1以外なら"B"を末尾に追加します。
したがって“AABAB”を得るには、1番目と2番目と4番目が1、3番目と5番目が1以外である必要があります。
【計算】
選択肢4の{1, 1, 2, 1, 0}をたどります。
i=1のとき、要素は1なので"A"を追加し、"A"になります。
i=2のとき、要素は1なので"A"を追加し、"AA"になります。
i=3のとき、要素は2で1以外なので"B"を追加し、"AAB"になります。
i=4のとき、要素は1なので"A"を追加し、"AABA"になります。
i=5のとき、要素は0で1以外なので"B"を追加し、"AABAB"になります。
【選択肢別解説】
1:× {0, 0, 1, 2, 1}は、0、0、1、2、1の順に"B"、"B"、"A"、"B"、"A"となります。
戻り値は“BBABA”であり、“AABAB”になりません。
2:× {0, 1, 2, 1, 1}は、0、1、2、1、1の順に"B"、"A"、"B"、"A"、"A"となります。
戻り値は“BABAA”であり、“AABAB”になりません。
3:× {1, 0, 1, 2, 0}は、1、0、1、2、0の順に"A"、"B"、"A"、"B"、"B"となります。
戻り値は“ABABB”であり、“AABAB”になりません。
4:○ {1, 1, 2, 1, 0}は、上の計算のとおり戻り値が“AABAB”になります。
【ポイント】
if文の条件は「1と等しいか」だけなので、0も2も同じく"B"になります。
条件に当てはまらない値はすべてelse側に進むことを確認しましょう。