基本情報技術者令和7年 [科目B]問4

問4

 次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。

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

〔プログラム〕
b04_1.png/image-size:502×414
  • 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/image-size:350×326
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop