ITパスポート 2024年 問62
問題文
関数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
選択肢
ア:{0, 0, 1, 2, 1}
イ:{0, 1, 2, 1, 1}
ウ:{1, 0, 1, 2, 0}
エ:{1, 1, 2, 1, 0}(正解)
🔒 解説は解答すると表示されます
関数convertの戻り値が“AABAB”になる引数はどれか【ITパスポート 解説】
正解の理由
このプログラムでは、配列(配列:同じ種類のデータを順に並べたもの)の各要素を先頭から順に調べます。条件文は「もし要素が1と等しいなら 'A' を追加、そうでなければ 'B' を追加」となっています。つまり「要素が1 → A」「要素が1でない → B」です。求める戻り値が "A A B A B" になるためには、配列の1〜5番目の値がそれぞれ「1, 1, (1ではない値), 1, (1ではない値)」でなければなりません。与えられた選択肢のうち、その条件を満たすのが エ の {1, 1, 2, 1, 0} です。3番目は2(1ではない)でB、5番目は0(1ではない)でBになるため、結果は "AABAB" になります。
(用語注)
- 整数型(整数型:小数点のない数を扱うデータの種類)
- 文字列型(文字列型:文字を並べて扱うデータの種類)
- 要素番号は問題文どおり「1から始まる」ことに注意します(多くの言語では0から始まりますが、本問題は1始まりです)。
解法ステップ
- プログラムのルールを確認:要素が1なら 'A'、そうでなければ 'B' を末尾に追加する。
- 目標の文字列 "AABAB" を要素ごとに分けると、位置1〜5の対応は次の通り:
- 1番目 → A → 要素は1
- 2番目 → A → 要素は1
- 3番目 → B → 要素は1以外(0や2など)
- 4番目 → A → 要素は1
- 5番目 → B → 要素は1以外
- 各選択肢を当てはめて、上の条件を満たすか確認する。
- 条件を満たすのは エ の {1, 1, 2, 1, 0} であると判断できる。
選択肢別の誤答解説
-
ア: {0, 0, 1, 2, 1}
1番目が0なので1番目で 'B' が出ます。結果は "BBABB" のようになり、"AABAB" とは違います。 -
イ: {0, 1, 2, 1, 1}
1番目が0で 'B' になるため、先頭が 'B' になり "AABAB" にできません。 -
ウ: {1, 0, 1, 2, 0}
1番目が1でA、2番目が0でBとなるので先頭2文字は "AB" になり、目標の "AA" になりません。 -
エ: {1, 1, 2, 1, 0}
1→A、2→A、3→2(1ではないのでB)、4→A、5→0(1ではないのでB)となり、順に "A A B A B"、つまり "AABAB" となります。よってこの選択肢が正しいです。
よくある誤解
-
添え字(要素番号)が0始まりだと勘違いする
- 多くのプログラミング言語(例:C、Java、Python)は配列の添え字が0から始まりますが、本問題は「要素番号は1から始まる」と明記されています。問題文のルールに合わせて考えてください。
-
「1と等しい」の意味を取り違える
- 条件は「等しい(==)」です。1より大きい・小さいではありません。値が1であればA、1でなければすべてBです(2や0、負の数でもBになります)。
-
要素の値そのものを文字に変換すると誤解する
- プログラムは数値を文字に変換しているのではなく、条件によって文字 'A' または 'B' を追加しています。数値が1かどうかが判断基準です。
補足コラム
配列の添え字(インデックス)が1から始まるか0から始まるかは、出題者や言語仕様で変わります。試験問題では問題文の記述に従うことが最重要です。実務では、たとえばExcelの行番号は1から始まりますが、プログラミング言語の実装では0始まりが多数派です。問題を解くときは「まず問題文を正確に読む」ことを習慣にしましょう。
簡単な確認テクニック:求めたい文字列の各文字を「その位置の要素が1か否か」に置き換え、候補と比較するだけです。今回なら "AABAB" → 1,1,≠1,1,≠1 という具合です。
FAQ
Q1: 配列に2や0が混ざっていても判定できますか?
A1: はい。プログラムは「1かどうか」だけを見ているため、2や0はどちらも「1ではない」扱いでBになります。
A1: はい。プログラムは「1かどうか」だけを見ているため、2や0はどちらも「1ではない」扱いでBになります。
Q2: 要素数が5より多い・少ない場合はどうする?
A2: 問題文にある出力が5文字(AABAB)なので、対象の配列は少なくとも5要素必要です。選択肢は5要素で与えられているため、そのまま比較します。一般的にはループは配列の要素数分だけ回ります。
A2: 問題文にある出力が5文字(AABAB)なので、対象の配列は少なくとも5要素必要です。選択肢は5要素で与えられているため、そのまま比較します。一般的にはループは配列の要素数分だけ回ります。
Q3: プログラムの if 文が逆に読める気がします。見分け方は?
A3: 「if (arrayInput[i]が1と等しい) stringOutputに 'A' を追加 else 'B'」と明記されています。まずその自然文どおりに解釈してください。迷ったら例を1つ手で追うと確実です。
A3: 「if (arrayInput[i]が1と等しい) stringOutputに 'A' を追加 else 'B'」と明記されています。まずその自然文どおりに解釈してください。迷ったら例を1つ手で追うと確実です。
関連キーワード: 配列、添え字(インデックス)、等価比較、文字列連結、条件分岐、ループ、1始まり添え字、単純判定

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

