#G5OBJ04. GESP C++ 五级真题客观题|二分查找与二分答案
GESP C++ 五级真题客观题|二分查找与二分答案
01|2025-03-L5-TF-08
二分查找适用于对无序数组和有序数组的查找。
{{ select(1) }}
- 正确
- 错误
02|2025-03-L5-SC-11
若用二分法在 [1, 100] 内猜数,最多需要猜( )次。
{{ select(2) }}
- 100
- 10
- 7
- 5
03|2025-06-L5-TF-06
查字典这个小学生必备技能,可以把字典视为一个已排序的数组。假设小杨要查找一个音首字母为 g 的单词,他首先翻到字典约一半的页数,发现该页的首字母是 m,由于字母表中 g 位于 m 之前,所以排除字典后半部分,查找范围缩小到前半部分;不断重复上述步骤,直至找到首字母为 g 的页码。这种查字典的一系列操作可看作二分查找。
{{ select(3) }}
- 正确
- 错误
04|2025-12-L5-TF-05
二分查找仅适用于有序数据。若输入数据无序,当仅进行一次查找时,为了使用二分而排序通常不划算。
{{ select(4) }}
- 正确
- 错误
05|2025-03-L5-SC-12
下面代码实现了二分查找算法,在数组 arr 找到目标元素 target 的位置,则横线上能填写的最佳代码是( )。

{{ select(5) }}
- int mid = left + (right - left) / 2;
- int mid = left;
- int mid = (left + right) / 2;
- int mid = right;
06|2025-12-L5-SC-11
下面代码尝试在有序数组中查找第一个大于等于x的元素位置。如果没有大于等于x的元素,返回arr.size()。以下说法正确的是( )。

{{ select(6) }}
- 上述代码逻辑正确
- 上述代码逻辑错误,while循环条件应该用l <= r
- 上述代码逻辑错误,mid计算错误
- 上述代码逻辑错误,边界条件不对
07|2026-03-L5-TF-02
若数组a已按升序排列,则下面代码可以正确实现在a中查找第一个大于等于x的元素的位置。

{{ select(7) }}
- 正确
- 错误
08|2026-03-L5-SC-08
在升序数组中查找第一个大于等于x的位置,下面循环中横线应填( )。

{{ select(8) }}
09|2026-06-L5-TF-07
二分查找不仅可以应用于有序数组,也可以在不增加时间复杂度的情况下应用于有序的单链表,因为链表也支持 O(1) 时间内的随机访问。
{{ select(9) }}
- 正确
- 错误
10|2026-06-L5-SC-09
在一个有序数组中查找第一个大于或等于 x 的元素位置,横线处应填写( )。

{{ select(10) }}
- r = mid + 1
- r = mid - 1
- r = mid
- l = mid
11|2025-06-L5-SC-11
下面的 C++ 代码用于在升序数组 lst 中查找目标值 target 最后一次出现的位置。相关说法,正确的是( )。

{{ select(11) }}
- 当 lst 中存在重复的 target 时,该函数总能返回最后一个 target 的位置,即便 lst 全由相同元素组成
- 当 target 小于 lst 中所有元素时,该函数会返回 0
- 循环条件改为 while (low <= high) 程序执行效果相同,且能提高准确性
- 将代码中 (low + high + 1) / 2 修改为 (low + high) / 2 效果相同
12|2025-06-L5-SC-12
有关下面C++代码的说法,错误的是( )。


{{ select(12) }}
- “阶段1”的目标是寻找正整数 n 可能的正完全平方根
- “阶段2”的目标是如果正整数 n 没有正完全平方根,则在可能产生完全平方根附近寻找带小数点的平方根
- 代码 check_int = (long long)(result + 0.5) 是检查因浮点误差是否为正完全平方根
- 阶段2的二分法中 high_d - low_d >= epsilon 不能用于浮点数比较,会进入死循环
13|2025-09-L5-TF-05
二分查找依赖数据的有序性,通过循环逐步缩减一半搜索区间来进行查找,且仅适用于数组或基于数组实现的数据结构。
校注版说明(作答前常显):校注版:学生判题F,与官方答案表T不同。C++11 std::lower_bound只要求ForwardIterator,非数组容器也可执行;但非随机访问迭代器通常失去对数级总时间优势。
{{ select(13) }}
- 正确
- 错误
14|2025-12-L5-SC-12
小杨要把一根长度为L的木头切成K段,使得每段长度小于等于x。已知每切一刀只能把一段木头分成两段,他用二分法找到满足条件的最小x(x为正整数),则横线处应填写( )。

{{ select(14) }}
15|2026-03-L5-SC-07
下面程序的运行结果为( )。

{{ select(15) }}
- 2
- 3
- 4
- 5
16|2026-03-L5-TF-07
假设数组a的值域范围是D,以下程序的时间复杂度是O(n log n+n log D)。

{{ select(16) }}
- 正确
- 错误
17|2026-03-L5-SC-10
给定n根木头,第i根长度为a[i]。要切成不少于m段等长木段,求最大可能长度,则横线上应填写( )。

{{ select(17) }}
18|2026-06-L5-SC-10
有若干根木头,长度存于 wood。每切一刀可以把一段木头分成两段。函数 check(wood, K, x) 返回:用不超过 K 刀,能否使所有木段长度都不超过 x。下面代码使用二分答案查找最小可行的 x,横线处应填( )。

{{ select(18) }}
- r = mid + 1
- r = mid
- l = mid
- r = mid - 1
19|2025-09-L5-SC-10
给定一个 n x n 的矩阵 matrix,矩阵的每一行和每一列都按升序排列。函数 countLE 返回矩阵中第 k 小的元素,则两处横线上应分别填写( )。


{{ select(19) }}















