FE Study
FE Study メニュー

学習記録はこのブラウザー内に保存されます。

ホーム問題を解く
ログイン不要・無料で学習

ONE QUESTION, ONE STEP

二分探索を学ぼう

選んで、確かめて、理解する。焦らず進めましょう。

科目Bアルゴリズム標準
QUESTION 50

次の関数searchCountは、昇順の配列から31を二分探索し、発見までのループ回数countを返す。返される値はいくつか。配列の要素番号は1から始まり、「÷ 2 の商」は小数部を切り捨てた整数とする。 ○ 整数型: searchCount() 整数型の配列: a ← {4, 9, 15, 23, 31, 46, 57} 整数型: left ← 1 整数型: right ← 7 整数型: mid 整数型: count ← 0 while (left <= right) mid ← (left + right) ÷ 2 の商 count ← count + 1 if (a[mid] = 31) return count elseif (a[mid] < 31) left ← mid + 1 else right ← mid - 1 endif endwhile return count

出典:本サイト オリジナル教材(2026年)

本サイトで独自に作成。IPAの試験問題からの転載ではありません。

公開日:

解答を一つ選んでください

選択肢を選んで、答え合わせをしましょう。

回答せずに正解・解説を確認する

正解:ウ 3

この表示だけでは、回答数や正答率は変わりません。

解説

1回目はleft=1、right=7からmid=4となり、a[4]=23が31より小さいためleft=5です。2回目はmid=6でa[6]=46が大きいためright=5です。3回目はmid=5でa[5]=31が一致します。countは各ループで1ずつ増えるので3を返します。

ア

最初に見るのは中央のa[4]=23で、31ではありません。

イ

2回目に見るa[6]=46も一致しないため、もう1回探索します。

ウ

参照する要素番号は4 → 6 → 5で、3回目に発見します。

エ

3回目にreturnするので4回目のループは実行しません。

関連知識

探索範囲は両端を含む区間[left,right]です。中央と一致しなかったとき、mid自体も候補から除くため、mid+1またはmid−1で範囲を更新します。

間違えやすいポイント

countは条件式を評価した総回数ではなく、while本体の実行回数です。equalsと大小比較を別々に数えないようにします。

覚え方

left・mid・rightを毎回一行で記録。

実務での意味

探索処理の境界更新を検証するとき、見つかる場合と見つからない場合の両方を表で確認します。

解説:本サイト編集部によるオリジナル文章

この問題の前後に、アルゴリズムの基礎知識ガイドで、 仕組み・比較・解き方を確認できます。 手順を確かめたい方は連続達成回数を求める擬似言語を、一行ずつ追跡するの実習へ。 この問題の誤りを報告する(GitHub)。問題IDとURLを入力した下書きが開きます。自動投稿は行いません。 投稿は公開されるため、氏名・住所・メールアドレス・学習記録は記入しないでください。 詳しくはお問い合わせ窓口をご覧ください。