令和7年試験問題 [科目B]問4
問4解説へ
次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 search は,二つの文字型の配列を,それぞれ引数 data 及び key で受け取り,data から,key の要素の並びと同じ並びを全て探し,その先頭の要素番号を全て格納した配列を返す。見つからなければ,要素数0の配列を返す。
関数 search を search({"a","b","a","b","c","a","b","c"},{"a","b","c"}) として呼び出すと,/*** β ***/の行の条件式が真となる回数は 回である。
〔プログラム〕
関数 search は,二つの文字型の配列を,それぞれ引数 data 及び key で受け取り,data から,key の要素の並びと同じ並びを全て探し,その先頭の要素番号を全て格納した配列を返す。見つからなければ,要素数0の配列を返す。
関数 search を search({"a","b","a","b","c","a","b","c"},{"a","b","c"}) として呼び出すと,/*** β ***/の行の条件式が真となる回数は 回である。
〔プログラム〕

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
正解 ク問題へ
分野:アルゴリズムとプログラミング
カテゴリ:データ構造及びアルゴリズム
カテゴリ:データ構造及びアルゴリズム
広告
解説
特定の引数が示され、結果や処理回数を問うプログラム問題では、トレースして確認するのが基本の解き方です。
以下は、関数 search を呼び出した場合の処理の流れです。
以下は、関数 search を呼び出した場合の処理の流れです。
- lenData ← dataの要素数 = 8
lenKey ← keyの要素数 = 3 - 外側のループ処理が開始。「lenData - lenKey + 1 = 8 - 3 + 1 = 6」なので、1から6まで繰り返す
- 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(偽) - i=2:内側のループ処理が開始。jを1から3まで繰り返す
data[2] = key[1]("b" = "a")はfalse(偽)
内側のループ終了 - 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を追加 - i=4:内側のループ処理が開始。jを1から3まで繰り返す
data[4] = key[1]("b" = "a")はfalse(偽)
内側のループ終了 - i=5:内側のループ処理が開始。jを1から3まで繰り返す
data[5]("c" = key[1]("a")はfalse(偽)
内側のループ終了 - 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を追加 - 外側のループが終了。result {3, 6} を返却

広告