科目B
令和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
答えを選ぶ
出典:令和7年度 基本情報技術者試験 科目B 公開問題 問4(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:ク
覚える知識
文字列照合(力まかせ法)の比較回数トレース
力まかせ法では、照合を始める位置を 1 つずつずらし、key と先頭から比べていく。不一致が出たらその位置の照合を打ち切る。
この問題で必要なこと
lenData = 8、lenKey = 3 なので、i は 1〜6 を動く。i=1 は a・b が一致し、3 文字目 a≠c で終了(真 2 回)。i=2・4・5 は 1 文字目が不一致で 0 回。i=3 と i=6 は a・b・c が全て一致して各 3 回。合計 2+3+3 = 8 回で、正解はク。
ひっかけ
不一致になった比較(偽)も数えてしまう誤りや、完全に一致した位置(2 回)だけを数える誤りがある。i の上限(lenData − lenKey + 1 = 6)を 8 まで回すと思うと回数がずれる。