関数 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
令和6年度 ITパスポート試験 問62
この問題の解説と、これまでの解答の記録です。
問62
頻出度★★☆
解説
問 62
不正解ア
{0,0,1,2,1} は 0→B, 0→B, 1→A, 2→B, 1→A となり“BBABA”。先頭2文字が B になり“AABAB”と一致しない。
不正解イ
{0,1,2,1,1} は 0→B, 1→A, 2→B, 1→A, 1→A となり“BABAA”。1文字目が B, 末尾が A で“AABAB”と一致しない。
不正解ウ
{1,0,1,2,0} は 1→A, 0→B, 1→A, 2→B, 0→B となり“ABABB”。2文字目以降のパターンが“AABAB”と一致しない。
- エ
正解 プログラムは配列 arrayInput を要素番号1から末尾まで順にたどり, 要素の値が1と等しければ末尾に“A”を, それ以外なら“B”を追加して文字列を作る。戻り値が“AABAB”になるには, 1文字目から順に A・A・B・A・B となる必要があり, 各要素は「1, 1, 1以外, 1, 1以外」でなければならない。エ {1,1,2,1,0} をあてはめると, 1→A, 1→A, 2→B, 1→A, 0→B となり“AABAB”が得られるので正しい。
ここがポイント
- 擬似言語のトレース: for で配列を要素番号1から順に走査し, if (選択) の条件「要素が1と等しい」で出力が“A”と“B”に分岐する流れを1要素ずつ追う。
- 目標の出力文字列から逆算する考え方: “AABAB”の各文字 A/B を, A=要素が1, B=要素が1以外 と対応づけ, 各要素が満たすべき条件を特定して選択肢を照合する。
用語