次の記述中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数searchは、引数dataで指定された配列に、引数targetで指定された値が含まれていればその要素番号を返し、含まれていなければ-1を返す。dataは昇順に整列されており、値に重複はない。 関数searchには不具合がある。例えば、dataの 場合は、無限ループになる。 〔プログラム〕 ○整数型: search(整数型の配列: data, 整数型: target) 整数型: low, high, middle low ← 1 high ← dataの要素数 while (low ≦ high) middle ← (low + high) ÷ 2 の商 if (data[middle] < target) low ← middle elseif (data[middle] > target) high ← middle else return middle endif endwhile return -1
2分探索でlow←middleとすると範囲が縮まらず無限ループ
○整数型: search(整数型の配列: data, 整数型: target)
整数型: low, high, middle
low ← 1
high ← dataの要素数
while (low ≦ high)
middle ← (low + high) ÷ 2 の商
if (data[middle] < target)
low ← middle
elseif (data[middle] > target)
high ← middle
else
return middle
endif
endwhile
return -1
選択肢
- ア要素数が1で、targetがその要素の値と等しい
- イ要素数が2で、targetがdataの先頭要素の値と等しい
- ウ要素数が2で、targetがdataの末尾要素の値と等しい
- エ要素に-1が含まれている
正解と解説
正解:ウ 要素数が2で、targetがdataの末尾要素の値と等しい
正しい2分探索では範囲を狭めるときに low ← middle+1、high ← middle-1 とします。このプログラムは low ← middle としているため、探索範囲が縮まらない場合があります。要素数2で目的の値が末尾にあるとき、middleは(1+2)÷2の商で常に1となり、data[1]<targetからlowが1のまま更新されず、条件が変わらないまま繰り返してしまいます。
選択肢ごとの解説
- アmiddleが1で目的の値と一致し、その場でreturnされる。
- イmiddle=1で目的の値と一致するため、1回で終了する。
- ウ正解。middleが常に1のままlowも1で更新されず、条件が変化しない。
- エ格納されている値の内容は、範囲更新の不具合とは無関係。
同じ分野の他の問題
- 次の記述中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数searchは、二つ…2025年度 公開問題 科目B 問4
- キーが小文字のアルファベット1文字(a, b, …, z のいずれか)であるデータを、大きさが10のハッシュ表に格納する…2024年度 公開問題 科目A 問2
- 次の記述中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数addは、引数で指定…2023年度 公開問題 科目B 問4
- 10進法で5桁の数a1 a2 a3 a4 a5を、ハッシュ法を用いて配列に格納したい。ハッシュ関数をmod(a1+a2+…2022年度 公開問題 科目A 問7
- 10進法で5桁の数a1 a2 a3 a4 a5を、ハッシュ法を用いて配列に格納したい。ハッシュ関数をmod(a1+a2+…2019年度 秋期 午前 問10
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。