基本情報技術者試験の科目Bの公開問題を題材に,配列の中から指定した並びを探す処理について学習します。この問題では,2つの配列の要素を順番に比較し,指定した並びが現れる位置を求める処理を確認します。
令和7年度 基本情報技術者試験 公開問題 科目B 問4
問 次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 search は,二つの文字型の配列を,それぞれ引数 data 及び key で受け取り,data から,key の要素の並びと同じ並びを全て探し,その先頭の要素番号を全て格納した配列を返す。見つからなければ,要素数0の配列を返す。
関数 search を search({“a”,“b”,“a”,“b”,“c”,“a”,“b”,“c”},{“a”,“b”,“c”}) として呼び出すと,/*** β ***/ の行の条件式が真となる回数は 回である。
〔プログラム〕
/* keyは,要素数1以上の配列である */
○整数型の配列: search(文字型の配列: data,文字型の配列: key)
整数型: i,j,lenData,lenKey
整数型の配列: result ← {} // 要素数0の配列
lenData ← dataの要素数
lenKey ← keyの要素数
/* (lenData - lenKey + 1) が0以下のときは繰返し処理を実行しない */
for (i を 1 から (lenData - lenKey + 1) まで 1 ずつ増やす)
for (j を 1 から lenKey まで 1 ずつ増やす) // α
if (data[i + j - 1] が key[j] と等しい) /*** β ***/
if (j が lenKey と等しい)
resultの末尾 に iの値 を追加する
endif
else
αの行から始まる繰返し処理を終了する
endif
endfor
endfor
return result
解答群
| ア 1 | イ 2 | ウ 3 | エ 4 | オ 5 |
| カ 6 | キ 7 | ク 8 | ケ 9 | コ 10 |
【解答】ク
【解説】
data の中から,key と同じ並びが始まる位置を順番に調べる。data は {“a”,“b”,“a”,“b”,“c”,“a”,“b”,“c”},key は {“a”,“b”,“c”} なので,i は 1 から 6 まで変化する。i = 1 のときは,data[1] と key[1],data[2] と key[2] がそれぞれ一致するが,data[3] と key[3] は一致しない。そのため,βの条件式は2回真,1回偽となる。i = 2,4,5 のときは,最初の要素から一致しないため,βの条件式は真にならない。i = 3 と 6 のときは,data の並びが {“a”,“b”,“c”} と一致するため,βの条件式はそれぞれ3回真となる。したがって,βの行の条件式が真となる回数は,2 + 0 + 3 + 0 + 0 + 3 = 8回 となる。
この問題のポイント
この問題から学べることは,
- 配列の中から指定した並びを探す方法
- 2つの配列の要素を順番に比較する方法
- 一致しない場合に繰返し処理を終了する方法
- 指定した並びが見つかった位置を記録する方法
- 二重ループによる配列の検索処理
です。特に,配列の中から指定した並びを探すときは,調べる位置を1つずつずらしながら,配列の要素を順番に比較していく処理を理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


