ITパスポート過去問 令和6年度(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}
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
この関数は、配列を先頭から順に読み、値が1なら"A"、1以外なら"B"を文字列の末尾に追加します。戻り値が"AABAB"になるには、1~5番目の要素が「1、1、1以外、1、1以外」となればよいので、{1, 1, 2, 1, 0}に一致する「エ」が正解です。
Point
この問題は、for文による繰り返し処理とif文による条件分岐を、配列の要素番号(1始まり)に沿って追跡し、出力される文字列と入力配列の条件を対応付けて判断する力を問うものです。
解くために必要な知識
この問題を解くには、繰り返し処理で配列を先頭から順に処理し、条件分岐で文字を追加する流れを理解している必要があります。
用語の整理
| 用語名 | 意味 |
|---|---|
| 配列 | 同じ型のデータを並べて格納し、要素番号で参照するデータ構造です。 |
| 要素 | 配列の中に入っている1つ1つの値です。 |
| 要素番号 | 配列の位置を表す番号です。この問題では1から始まります。 |
| 引数 | 関数を呼び出すときに渡す入力データです。 |
| 戻り値 | 関数が処理結果として返す値です。 |
| 繰り返し(for文) | 同じ処理を指定回数だけ繰り返す制御構造です。 |
| 条件分岐(if文) | 条件が真か偽かで実行する処理を分ける制御構造です。 |
| 文字列 | 文字の並びです。ここでは"A"や"B"を順に追加して作ります。 |
解くための手順
出力と入力の対応付け
-
ループ1回につき、配列の要素1個が判定され、文字が1個追加されます。
-
出力文字列のn文字目は、配列のn番目の要素の判定結果です。
判定規則の確認
| 配列要素の値 | 追加される文字 |
|---|---|
| 1 | A |
| 1以外 | B |
選択肢の確認方法
-
出力したい文字列を左から見て、Aなら対応する要素を1にします。
-
Bなら対応する要素を1以外にします。
-
その条件に一致する配列を選びます。
問題の解法手順
解く手順
1. 変換ルールを確認する
各要素について、次のルールで1文字が追加されます。
| 条件 | 追加される文字 |
|---|---|
| arrayInput[i] = 1 | "A" |
| arrayInput[i] ≠ 1 | "B" |
2. 出力"AABAB"から、各位置の配列要素の条件を決める
| 位置(i) | 出力 | arrayInput[i]の条件 |
|---|---|---|
| 1 | A | = 1 |
| 2 | A | = 1 |
| 3 | B | ≠ 1 |
| 4 | A | = 1 |
| 5 | B | ≠ 1 |
したがって、入力配列は次を満たせばよいです。
{1, 1, 1以外, 1, 1以外}
3. 選択肢を照合する
{1, 1, 2, 1, 0}は、3番目と5番目が1以外なので条件に一致します。よって選択肢エが正解です。
選択肢ごとの解説
- ア:不正解
{0, 0, 1, 2, 1} は、B,B,A,B,A となるので "BBABA" です。先頭2文字がAになりません。
- イ:不正解
{0, 1, 2, 1, 1} は、B,A,B,A,A となるので "BABAA" です。5文字目がAになり、"AABAB" と一致しません。
- ウ:不正解
{1, 0, 1, 2, 0} は、A,B,A,B,B となるので "ABABB" です。2文字目がAになりません。
- エ:正解
{1, 1, 2, 1, 0} は、A,A,B,A,B となるので "AABAB" です。"AABAB" に必要な条件「1、1、1以外、1、1以外」を満たします。
まとめ
この関数は、配列を先頭から順に読み、値が1なら"A"、1以外なら"B"を文字列の末尾に追加します。戻り値が"AABAB"になるには、1~5番目の要素が「1、1、1以外、1、1以外」となればよいので、{1, 1, 2, 1, 0}に一致する「エ」が正解です。
テクノロジ系 > 基礎理論 > アルゴリズムとプログラミング
{0, 0, 1, 2, 1} は、B,B,A,B,A となるので "BBABA" です。先頭2文字がAになりません。
{0, 1, 2, 1, 1} は、B,A,B,A,A となるので "BABAA" です。5文字目がAになり、"AABAB" と一致しません。
{1, 0, 1, 2, 0} は、A,B,A,B,B となるので "ABABB" です。2文字目がAになりません。
{1, 1, 2, 1, 0} は、A,A,B,A,B となるので "AABAB" です。"AABAB" に必要な条件「1、1、1以外、1、1以外」を満たします。