基本情報技術者科目Bの擬似言語とデータ構造オリジナル・公式資料照合難易度★★★☆☆
昇順配列a={2,5,8,12,16,23,38}の添字は1~7である。二分探索でlow=1, high=7から開始し、mid=floor((low+high)/2)とする。x=16を探し、a[mid]<xならlow=mid+1、a[mid]>xならhigh=mid-1にする。比較する添字midの順序はどれか。
A
4→6→5★ 正解
最初mid=4で12<16、次は範囲5~7でmid=6、23>16なので範囲5~5でmid=5になります。
B
4→5
mid=4の次はlow=5,high=7の中央6です。直ちに5にはなりません。
C
1→2→3→4→5
これは先頭から1個ずつ調べる線形探索の順で、二分探索ではありません。
D
4→2→3
12より大きい16を探すので右半分へ進みます。左側の2や3へは進みません。
解説
探索範囲を左右に絞ります。範囲[1,7]→[5,7]→[5,5]に対応してmidは4→6→5です。
根拠資料・確認情報
対応範囲:2026年度 基本情報技術者試験 科目A・B
資料確認日:2026-10-28
同じレッスンの問題
問題 1
配列a={3,8,2,7,4}の添字は1から始まる。次の擬似言語を実行した後のsはどれか。
s ← 0
for i を 1 から 5 まで1ずつ増やす
if a[i] mod 2 = 0
s ← s + a[i]
endif
endfor
modは整数の剰余を表す。
問題 2
添字1~5の配列a={6,4,9,2,7}を次の処理で探索する。x=9のとき、返す値はどれか。
i ← 1
while i ≦ 5 and a[i] ≠ x
i ← i + 1
endwhile
if i ≦ 5
return i
else
return 0
endif
andは左側が偽なら右側を評価しない。
問題 4
空のスタックに対して、push(4)、push(7)、x←pop()、push(2)、y←pop()、z←pop()を順に実行する。pushは先頭へ積み、popは最後に積んだ要素を取り出す。x,y,zの組はどれか。
問題 5
配列a={2,2,5,5,5,2}の隣接する同じ値を一つのまとまりとして数える。次の処理のgroupsは最終的に幾つか。添字は1~6である。
groups ← 1
for i を 2 から 6 まで1ずつ増やす
if a[i] ≠ a[i-1]
groups ← groups + 1
endif
endfor