#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 的位置,则横线上能填写的最佳代码是( )。

SC-12题干代码

{{ 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()。以下说法正确的是( )。

SC-11题干代码

{{ select(6) }}

  • 上述代码逻辑正确
  • 上述代码逻辑错误,while循环条件应该用l <= r
  • 上述代码逻辑错误,mid计算错误
  • 上述代码逻辑错误,边界条件不对

07|2026-03-L5-TF-02

若数组a已按升序排列,则下面代码可以正确实现在a中查找第一个大于等于x的元素的位置。

TF-02题干代码

{{ select(7) }}

  • 正确
  • 错误

08|2026-03-L5-SC-08

在升序数组中查找第一个大于等于x的位置,下面循环中横线应填( )。

SC-08题干代码

{{ select(8) }}

  • SC-08选项A代码
  • SC-08选项B代码
  • SC-08选项C代码
  • SC-08选项D代码

09|2026-06-L5-TF-07

二分查找不仅可以应用于有序数组,也可以在不增加时间复杂度的情况下应用于有序的单链表,因为链表也支持 O(1) 时间内的随机访问。

{{ select(9) }}

  • 正确
  • 错误

10|2026-06-L5-SC-09

在一个有序数组中查找第一个大于或等于 x 的元素位置,横线处应填写( )。

SC-09题干代码

{{ select(10) }}

  • r = mid + 1
  • r = mid - 1
  • r = mid
  • l = mid

11|2025-06-L5-SC-11

下面的 C++ 代码用于在升序数组 lst 中查找目标值 target 最后一次出现的位置。相关说法,正确的是( )。

SC-11题干代码

{{ 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++代码的说法,错误的是( )。

SC-12题干代码第1部分

SC-12题干代码第2部分

{{ 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为正整数),则横线处应填写( )。

SC-12题干代码

{{ select(14) }}

  • SC-12选项A代码
  • SC-12选项B代码
  • SC-12选项C代码
  • SC-12选项D代码

15|2026-03-L5-SC-07

下面程序的运行结果为( )。

SC-07题干代码

{{ select(15) }}

  • 2
  • 3
  • 4
  • 5

16|2026-03-L5-TF-07

假设数组a的值域范围是D,以下程序的时间复杂度是O(n log n+n log D)。

TF-07题干代码

{{ select(16) }}

  • 正确
  • 错误

17|2026-03-L5-SC-10

给定n根木头,第i根长度为a[i]。要切成不少于m段等长木段,求最大可能长度,则横线上应填写( )。

SC-10题干代码

{{ select(17) }}

  • SC-10选项A代码
  • SC-10选项B代码
  • SC-10选项C代码
  • SC-10选项D代码

18|2026-06-L5-SC-10

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

SC-10题干代码

{{ select(18) }}

  • r = mid + 1
  • r = mid
  • l = mid
  • r = mid - 1

19|2025-09-L5-SC-10

给定一个 n x n 的矩阵 matrix,矩阵的每一行和每一列都按升序排列。函数 countLE 返回矩阵中第 k 小的元素,则两处横线上应分别填写( )。

SC-10题干代码第1部分

SC-10题干代码第2部分

{{ select(19) }}

  • SC-10选项A代码
  • SC-10选项B代码
  • SC-10选项C代码
  • SC-10选项D代码