令和7年試験問題 [科目B]問4

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
 次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。

 関数 search は,二つの文字型の配列を,それぞれ引数 data 及び key で受け取り,data から,key の要素の並びと同じ並びを全て探し,その先頭の要素番号を全て格納した配列を返す。見つからなければ,要素数0の配列を返す。
 関数 search を search({"a","b","a","b","c","a","b","c"},{"a","b","c"}) として呼び出すと,/*** β ***/の行の条件式が真となる回数は 回である。

〔プログラム〕
b04_1.png

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
正解 問題へ
分野:アルゴリズムとプログラミング
カテゴリ:データ構造及びアルゴリズム
解説
特定の引数が示され、結果や処理回数を問うプログラム問題では、トレースして確認するのが基本の解き方です。

以下は、関数 search を呼び出した場合の処理の流れです。
  1. lenData ← dataの要素数 = 8
    lenKey ← keyの要素数 = 3
  2. 外側のループ処理が開始。「lenData - lenKey + 1 = 8 - 3 + 1 = 6」なので、1から6まで繰り返す
  3. i=1:内側のループ処理が開始。lenKey = 3 なので、jを1から3まで繰り返す
    data[1] = key[1]("a" = "a")はtrue(
    data[2] = key[2]("b" = "b")はtrue(
    data[3] = key[3]("a" = "c")はfalse(偽)
  4. i=2:内側のループ処理が開始。jを1から3まで繰り返す
    data[2] = key[1]("b" = "a")はfalse(偽)
    内側のループ終了
  5. i=3:内側のループ処理が開始。jを1から3まで繰り返す
    data[3] = key[1]("a" = "a")はtrue(
    data[4] = key[2]("b" = "b")はtrue(
    data[5] = key[3]("c" = "c")はtrue(
    同じ並びが見つかる。resultにiを追加
  6. i=4:内側のループ処理が開始。jを1から3まで繰り返す
    data[4] = key[1]("b" = "a")はfalse(偽)
    内側のループ終了
  7. i=5:内側のループ処理が開始。jを1から3まで繰り返す
    data[5]("c" = key[1]("a")はfalse(偽)
    内側のループ終了
  8. i=6:内側のループ処理が開始。jを1から3まで繰り返す
    data[6] = key[1]("a" = "a")はtrue(
    data[7] = key[2]("b" = "b")はtrue(
    data[8] = key[3]("c" = "c")はtrue(
    同じ並びが見つかる。resultにiを追加
  9. 外側のループが終了。result {3, 6} を返却
以上の結果より、βの部分の条件式が真となる回数は8回です。したがって「ク」が正解となります。
b04_2.png

Pagetop