林老师 · 客观题题库 · 二分查找 · 考纲词条练习

二分查找 · 考纲词条练习

二分查找 · 共 100 题 · 原创真题风格补充卷
真题
复刻
试卷编号NEO-J-2026-二分查找
题目总数100 题 · 200 分
试卷类型客观题
考生须知:
① 本卷为客观题单卷,合计 100 题 · 200 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 200 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

客 观 题

100 QUESTIONS · 2 POINTS EACH
第 1 题 单选 未作答

在数组中查找某个给定值,若找到,函数通常返回的是( )。

(2 分)
原创 2026 · 单选 第1题 | 知识点 KJ-30a
第 2 题 单选 未作答

下列最适合用顺序查找(从头到尾逐个比较)的情形是( )。

(2 分)
原创 2026 · 单选 第2题 | 知识点 KJ-30a
第 3 题 单选 未作答

用顺序查找在 nn 个元素的数组中查找某个值,最坏情况下需要比较的次数是( )。

(2 分)
原创 2026 · 单选 第3题 | 知识点 KJ-30a
第 4 题 单选 未作答

顺序查找成功找到目标时(假设目标等概率出现在每个位置),平均比较次数约是( )。

(2 分)
原创 2026 · 单选 第4题 | 知识点 KJ-30a
第 5 题 单选 未作答

单链表不能高效地使用二分查找,根本原因是( )。

(2 分)
原创 2026 · 单选 第5题 | 知识点 KJ-30a
第 6 题 单选 未作答

C++ 数组 int a[8]; 的合法下标范围是( )。

(2 分)
原创 2026 · 单选 第6题 | 知识点 KJ-30a
第 7 题 单选 未作答

顺序查找的哨兵法把待查值先放到数组末尾空位上,其目的是( )。

(2 分)
原创 2026 · 单选 第7题 | 知识点 KJ-30a
第 8 题 单选 未作答

关于顺序查找,下列说法正确的是( )。

(2 分)
原创 2026 · 单选 第8题 | 知识点 KJ-30a
第 9 题 单选 未作答

二分查找的基本思想是( )。

(2 分)
原创 2026 · 单选 第9题 | 知识点 KJ-31d
第 10 题 单选 未作答

能对数组使用二分查找,必须满足的前提是( )。

(2 分)
原创 2026 · 单选 第10题 | 知识点 KJ-31d
第 11 题 单选 未作答

升序数组二分查找中,若 a[mid] < x,下一步应该( )。

(2 分)
原创 2026 · 单选 第11题 | 知识点 KJ-31d
第 12 题 单选 未作答

nn 个元素的有序数组,二分查找的时间复杂度是( )。

(2 分)
原创 2026 · 单选 第12题 | 知识点 KJ-31d
第 13 题 单选 未作答

100100 万(约 2202^{20})个元素的有序数组中查找,二分查找最多比较约 2020 次,顺序查找最坏要比较( )。

(2 分)
原创 2026 · 单选 第13题 | 知识点 KJ-31d
第 14 题 单选 未作答

二分查找每一轮循环真正维护的东西是( )。

(2 分)
原创 2026 · 单选 第14题 | 知识点 KJ-31d
第 15 题 单选 未作答

对单链表强行使用「二分」思想,效率提不上去,是因为( )。

(2 分)
原创 2026 · 单选 第15题 | 知识点 KJ-31d
第 16 题 单选 未作答

关于二分查找的局限,正确的是( )。

(2 分)
原创 2026 · 单选 第16题 | 知识点 KJ-31d
第 17 题 单选 未作答

二分中点常写成 mid = l + (r - l) / 2 而不是 mid = (l + r) / 2,原因是( )。

(2 分)
原创 2026 · 单选 第17题 | 知识点 KJ-31d
第 18 题 单选 未作答

闭区间写法的二分查找中,循环条件用 while (l <= r),原因是( )。

(2 分)
原创 2026 · 单选 第18题 | 知识点 KJ-31d
第 19 题 单选 未作答

比较后收缩区间写 l = mid + 1r = mid - 1 而不是 l = midr = mid,原因是( )。

(2 分)
原创 2026 · 单选 第19题 | 知识点 KJ-31d
第 20 题 单选 未作答

二分查找函数常把结果变量初始化为 1-1,其含义是( )。

(2 分)
原创 2026 · 单选 第20题 | 知识点 KJ-31d
第 21 题 单选 未作答

01int bsearch(int a[], int l, int r, int x) {
02    if (l > r) return -1;
03    int mid = (l + r) / 2;
04    if (a[mid] == x) return mid;
05    if (a[mid] < x) return bsearch(a, mid + 1, r, x);
06    return bsearch(a, l, mid - 1, x);
07}
08int main() {
09    int a[] = {3, 7, 11, 15, 19};
10    cout << bsearch(a, 0, 4, 11);
11    return 0;
12}

输出是( )。

(2 分)
原创 2026 · 单选 第21题 | 知识点 KJ-31d
第 22 题 单选 未作答

01int a[] = {3, 7, 11, 15, 19, 23};
02int x = 5;
03int l = 0, r = 5;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    if (a[mid] == x) break;
07    else if (a[mid] < x) l = mid + 1;
08    else r = mid - 1;
09}
10cout << l << " " << r;

输出是( )。

(2 分)
原创 2026 · 单选 第22题 | 知识点 KJ-31d
第 23 题 单选 未作答

10001000 个元素的有序数组中二分查找,第一次比较结束后,候选元素最多还剩( )。

(2 分)
原创 2026 · 单选 第23题 | 知识点 KJ-31d
第 24 题 单选 未作答

要找升序数组中第一个等于 x 的位置,二分命中 a[mid] == x 后正确的做法是( )。

(2 分)
原创 2026 · 单选 第24题 | 知识点 KJ-31d
第 25 题 单选 未作答

要找升序数组中最后一个等于 x 的位置,二分命中后正确的做法是( )。

(2 分)
原创 2026 · 单选 第25题 | 知识点 KJ-31d
第 26 题 单选 未作答

在升序数组中,lower_bound 查找返回的位置语义是( )。

(2 分)
原创 2026 · 单选 第26题 | 知识点 KJ-31d
第 27 题 单选 未作答

在升序数组中,upper_bound 查找返回的位置语义是( )。

(2 分)
原创 2026 · 单选 第27题 | 知识点 KJ-31d
第 28 题 单选 未作答

「找最后一个满足条件的位置」的二分中,中点常写成 mid = (l + r + 1) / 2 并配 l = mid,加一的目的是( )。

(2 分)
原创 2026 · 单选 第28题 | 知识点 KJ-31d
第 29 题 单选 未作答

条件 P(i) 随下标 i 单调(前段全假、后段全真)时,找第一个 P(i) 为真的下标,可以用二分的原因是( )。

(2 分)
原创 2026 · 单选 第29题 | 知识点 KJ-31d
第 30 题 单选 未作答

x 插入升序数组并保持有序,插入点的位置恰好等于( )。

(2 分)
原创 2026 · 单选 第30题 | 知识点 KJ-31d
第 31 题 单选 未作答

升序数组中 x 出现的次数,可以用两次边界二分直接算出,公式是( )。

(2 分)
原创 2026 · 单选 第31题 | 知识点 KJ-31d
第 32 题 单选 未作答

「二分答案」指的是( )。

(2 分)
原创 2026 · 单选 第32题 | 知识点 KJ-31d
第 33 题 单选 未作答

二分答案成立的前提是答案具有单调性,即( )。

(2 分)
原创 2026 · 单选 第33题 | 知识点 KJ-31d
第 34 题 单选 未作答

求「最大的可行答案」的二分答案框架中,check(mid) 为真时应执行( )。

(2 分)
原创 2026 · 单选 第34题 | 知识点 KJ-31d
第 35 题 单选 未作答

下列题目特征中最提示「这题该二分答案」的是( )。

(2 分)
原创 2026 · 单选 第35题 | 知识点 KJ-31d
第 36 题 单选 未作答

二分答案中 check(v) 函数的职责是( )。

(2 分)
原创 2026 · 单选 第36题 | 知识点 KJ-31d
第 37 题 单选 未作答

二分答案时答案变量常声明为 long long,典型原因是( )。

(2 分)
原创 2026 · 单选 第37题 | 知识点 KJ-31d
第 38 题 单选 未作答

二分答案与普通二分查找的关系,最准确的说法是( )。

(2 分)
原创 2026 · 单选 第38题 | 知识点 KJ-31d
第 39 题 单选 未作答

砍树问题:给每棵树一个高度,选一个统一的砍伐高度,高于它的部分被截下,要求截得的木材总量不少于需求量,且砍伐高度尽量高。答案随砍伐高度的变化是( )。

(2 分)
原创 2026 · 单选 第39题 | 知识点 KJ-31d
第 40 题 单选 未作答

跳石头问题:从起点到终点有若干石头,最多移走 MM 块,要使剩余石头间(含起终点)的最短跳跃距离尽量大。二分的对象是( )。

(2 分)
原创 2026 · 单选 第40题 | 知识点 KJ-31d
第 41 题 单选 未作答

分巧克力问题:把多块矩形巧克力切成若干正方形小份(每块只能按一种边长切),要切出至少 KK 份且边长尽量大。随着切的边长增大,能切出的总份数( )。

(2 分)
原创 2026 · 单选 第41题 | 知识点 KJ-31d
第 42 题 单选 未作答

条件 mid * mid <= 30mid 增大由真变假,找最大的满足条件的 mid,这类问题可以直接二分,原因是( )。

(2 分)
原创 2026 · 单选 第42题 | 知识点 KJ-31d
第 43 题 单选 未作答

求最大可行答案时,在 check(mid) 为真的分支里写 ans = mid,其作用是( )。

(2 分)
原创 2026 · 单选 第43题 | 知识点 KJ-31d
第 44 题 单选 未作答

二分「砍树高度」时,右界 r 的合理初值通常取( )。

(2 分)
原创 2026 · 单选 第44题 | 知识点 KJ-31d
第 45 题 单选 未作答

跳石头问题的 check(mid) 里,从起点向终点扫描,遇到与「上一块保留位置」距离小于 mid 的石头就移走,这属于( )。

(2 分)
原创 2026 · 单选 第45题 | 知识点 KJ-31d
第 46 题 单选 未作答

用二分法求 2\sqrt{2}:初始区间 [0,2][0, 2],每步取中点,若中点的平方不超过 22 就把左端移到中点,否则把右端移到中点。这个方法能锁定平方根的原因是( )。

(2 分)
原创 2026 · 单选 第46题 | 知识点 KJ-31d
第 47 题 单选 未作答

浮点二分常用 while (r - l > 1e-6) 作为循环条件,终止的含义是( )。

(2 分)
原创 2026 · 单选 第47题 | 知识点 KJ-31d
第 48 题 单选 未作答

浮点二分也常直接 for (int i = 0; i < 100; i++) 循环一百次,原因是( )。

(2 分)
原创 2026 · 单选 第48题 | 知识点 KJ-31d
第 49 题 单选 未作答

用二分求方程 f(x)=0f(x)=0 的根,要求 ff 在区间 [l,r][l, r] 两端点处的函数值( )。

(2 分)
原创 2026 · 单选 第49题 | 知识点 KJ-31d
第 50 题 单选 未作答

浮点二分答案要求「保留 33 位小数」,循环精度 eps 通常取得比输出精度更小(如 10610^{-6}),原因是( )。

(2 分)
原创 2026 · 单选 第50题 | 知识点 KJ-31d
第 51 题 单选 未作答

x\sqrt{x}xx 为正实数)时,初始区间取 [0,x][0, x]x<1x < 1 时会出问题,更稳妥的右界是( )。

(2 分)
原创 2026 · 单选 第51题 | 知识点 KJ-31d
第 52 题 单选 未作答

二分查找每轮能把候选元素排除一半,依赖的两个事实是( )。

(2 分)
原创 2026 · 单选 第52题 | 知识点 KJ-31d
第 53 题 单选 未作答

2201002^{20} \approx 100 万元素的有序数组,二分查找最多比较的次数约为( )。

(2 分)
原创 2026 · 单选 第53题 | 知识点 KJ-31d
第 54 题 单选 未作答

只对无序数组做一次查找,选择顺序查找而不是「先排序再二分」的理由是( )。

(2 分)
原创 2026 · 单选 第54题 | 知识点 KJ-31d
第 55 题 单选 未作答

对同一批数据要做上万次「查某个值在不在」的查询,常见的高效方案是( )。

(2 分)
原创 2026 · 单选 第55题 | 知识点 KJ-31d
第 56 题 单选 未作答

100100 个已排序的数据元素,采用折半查找,最大比较次数是( )。

(2 分)
原创 2026 · 单选 第56题 | 知识点 KJ-31d
第 57 题 单选 未作答

01int a[] = {4, 7, 2, 7, 9};
02int x = 7;
03int pos = -1;
04for (int i = 0; i < 5; i++)
05    if (a[i] == x) { pos = i; break; }
06cout << pos;

输出是( )。

(2 分)
原创 2026 · 单选 第57题 | 知识点 KJ-30a
第 58 题 单选 未作答

01int a[] = {3, 1, 4, 1, 5};
02int x = 9;
03int pos = -1;
04for (int i = 0; i < 5; i++)
05    if (a[i] == x) pos = i;
06cout << pos;

输出是( )。

(2 分)
原创 2026 · 单选 第58题 | 知识点 KJ-30a
第 59 题 单选 未作答

01int a[] = {2, 5, 2, 3, 2, 8};
02int cnt = 0;
03for (int i = 0; i < 6; i++)
04    if (a[i] == 2) cnt++;
05cout << cnt;

输出是( )。

(2 分)
原创 2026 · 单选 第59题 | 知识点 KJ-30a
第 60 题 单选 未作答

01int a[] = {6, 3, 6, 6, 1};
02int pos = -1;
03for (int i = 0; i < 5; i++)
04    if (a[i] == 6) pos = i;
05cout << pos;

与第 57 题不同,这段循环没有 break,输出是( )。

(2 分)
原创 2026 · 单选 第60题 | 知识点 KJ-30a
第 61 题 单选 未作答

01int a[] = {5, 9, 3, 9, 4};
02int k = 0;
03for (int i = 1; i < 5; i++)
04    if (a[i] > a[k]) k = i;
05cout << k << " " << a[k];

输出是( )。

(2 分)
原创 2026 · 单选 第61题 | 知识点 KJ-30a
第 62 题 单选 未作答

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
02int x = 23;
03int l = 0, r = 9;
04int res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << res;

输出是( )。

(2 分)
原创 2026 · 单选 第62题 | 知识点 KJ-31d
第 63 题 单选 未作答

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
02int x = 24;
03int l = 0, r = 9;
04int res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << res;

输出是( )。

(2 分)
原创 2026 · 单选 第63题 | 知识点 KJ-31d
第 64 题 单选 未作答

01int a[] = {91, 72, 56, 38, 23, 16, 12, 8, 5, 2};
02int x = 72;
03int l = 0, r = 9, res = -1;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    if (a[mid] == x) { res = mid; break; }
07    else if (a[mid] > x) l = mid + 1;
08    else r = mid - 1;
09}
10cout << res;

输出是( )。

(2 分)
原创 2026 · 单选 第64题 | 知识点 KJ-31d
第 65 题 单选 未作答

01int a[] = {1, 3, 5, 7, 9, 11, 13, 15};
02int x = 15;
03int l = 0, r = 7;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    cout << mid;
07    if (a[mid] == x) break;
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}

输出是( )。

(2 分)
原创 2026 · 单选 第65题 | 知识点 KJ-31d
第 66 题 单选 未作答

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
02int x = 91;
03int l = 0, r = 9, cnt = 0;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    cnt++;
07    if (a[mid] == x) break;
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << cnt;

输出是( )。

(2 分)
原创 2026 · 单选 第66题 | 知识点 KJ-31d
第 67 题 单选 未作答

01int a[] = {1, 3, 3, 5, 7, 7, 7, 9};
02int x = 7;
03int l = 0, r = 8;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] >= x) r = mid;
07    else l = mid + 1;
08}
09cout << l << " " << a[l];

输出是( )。

(2 分)
原创 2026 · 单选 第67题 | 知识点 KJ-31d
第 68 题 单选 未作答

01int a[] = {1, 3, 3, 5, 7, 7, 7, 9};
02int x = 7;
03int l = 0, r = 8;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] > x) r = mid;
07    else l = mid + 1;
08}
09cout << l << " " << a[l];

输出是( )。

(2 分)
原创 2026 · 单选 第68题 | 知识点 KJ-31d
第 69 题 单选 未作答

01int a[] = {2, 4, 4, 4, 6, 8};
02int x = 4;
03int l = 0, r = 5;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] >= x) r = mid;
07    else l = mid + 1;
08}
09if (a[l] == x) cout << l;
10else cout << -1;

输出是( )。

(2 分)
原创 2026 · 单选 第69题 | 知识点 KJ-31d
第 70 题 单选 未作答

01int a[] = {2, 4, 4, 4, 6, 8};
02int x = 4;
03int l = 0, r = 6;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] <= x) l = mid + 1;
07    else r = mid;
08}
09cout << l - 1;

输出是( )。

(2 分)
原创 2026 · 单选 第70题 | 知识点 KJ-31d
第 71 题 单选 未作答

01int a[] = {1, 3, 5, 7, 9};
02int x = 6;
03int l = 0, r = 5;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] >= x) r = mid;
07    else l = mid + 1;
08}
09cout << l;

输出是( )。

(2 分)
原创 2026 · 单选 第71题 | 知识点 KJ-31d
第 72 题 单选 未作答

01long long n = 40;
02long long l = 0, r = 40, ans = 0;
03while (l <= r) {
04    long long mid = (l + r) / 2;
05    if (mid * mid <= n) { ans = mid; l = mid + 1; }
06    else r = mid - 1;
07}
08cout << ans;

输出是( )。

(2 分)
原创 2026 · 单选 第72题 | 知识点 KJ-31d
第 73 题 单选 未作答

l = 2000000000r = 2100000000 时写 mid = (l + r) / 2,风险是( )。

(2 分)
原创 2026 · 单选 第73题 | 知识点 KJ-31d
第 74 题 单选 未作答

01int a[] = {1, 2, 2, 2, 5};
02int x = 2;
03int l = 0, r = 4;
04while (l < r) {
05    int mid = (l + r + 1) / 2;
06    if (a[mid] <= x) l = mid;
07    else r = mid - 1;
08}
09cout << l << " " << a[l];

输出是( )。

(2 分)
原创 2026 · 单选 第74题 | 知识点 KJ-31d
第 75 题 单选 未作答

01int a[] = {20, 15, 10, 17};
02int cut = 15;
03int total = 0;
04for (int i = 0; i < 4; i++)
05    if (a[i] > cut) total += a[i] - cut;
06cout << total;

输出是( )。

(2 分)
原创 2026 · 单选 第75题 | 知识点 KJ-31d
第 76 题 单选 未作答

01int a[] = {20, 15, 10, 17};
02int need = 7;
03int l = 0, r = 20, ans = 0;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    int total = 0;
07    for (int i = 0; i < 4; i++)
08        if (a[i] > mid) total += a[i] - mid;
09    if (total >= need) { ans = mid; l = mid + 1; }
10    else r = mid - 1;
11}
12cout << ans;

输出是( )。

(2 分)
原创 2026 · 单选 第76题 | 知识点 KJ-31d
第 77 题 单选 未作答

石头距起点依次为 221111141417172121,终点在 2525,最多移走 22 块石头。判定「最短跳跃距离能否达到 44」:从起点向终点扫,与上一块保留位置距离小于 44 的石头就移走。需要的移走数是( )。

(2 分)
原创 2026 · 单选 第77题 | 知识点 KJ-31d
第 78 题 单选 未作答

两块巧克力尺寸分别为 6×56\times55×55\times5,按边长 55 切正方形,能切出的总份数是( )。

(2 分)
原创 2026 · 单选 第78题 | 知识点 KJ-31d
第 79 题 单选 未作答

01int l = 0, r = 30, ans = -1;
02while (l <= r) {
03    int mid = (l + r) / 2;
04    if (mid * mid <= 30) { ans = mid; l = mid + 1; }
05    else r = mid - 1;
06}
07cout << ans;

输出是( )。

(2 分)
原创 2026 · 单选 第79题 | 知识点 KJ-31d
第 80 题 单选 未作答

01int l = 0, r = 100;
02while (l < r) {
03    int mid = (l + r) / 2;
04    if (mid >= 17) r = mid;
05    else l = mid + 1;
06}
07cout << l;

输出是( )。

(2 分)
原创 2026 · 单选 第80题 | 知识点 KJ-31d
第 81 题 单选 未作答

01double x = 2.0;
02double l = 0, r = 2.0;
03for (int i = 0; i < 3; i++) {
04    double mid = (l + r) / 2;
05    if (mid * mid <= x) l = mid;
06    else r = mid;
07}
08cout << l << " " << r;

输出是( )。

(2 分)
原创 2026 · 单选 第81题 | 知识点 KJ-31d
第 82 题 单选 未作答

浮点二分初始区间宽度为 100100,要求把区间收缩到宽度小于 10610^{-6},至少需要二分约( )次。

(2 分)
原创 2026 · 单选 第82题 | 知识点 KJ-31d
第 83 题 单选 未作答

01double l = 1, r = 2;    // f(t) = t^3 - 3,两端函数值异号
02for (int i = 0; i < 4; i++) {
03    double mid = (l + r) / 2;
04    if (mid * mid * mid - 3 < 0) l = mid;
05    else r = mid;
06}
07cout << l << " " << r;

输出是( )。

(2 分)
原创 2026 · 单选 第83题 | 知识点 KJ-31d
第 84 题 单选 未作答

补全下面二分查找的循环条件:

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56};
02int x = 16;
03int l = 0, r = 7;
04int res = -1;
05while (/* 1 */) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}

空位 /* 1 */ 处应填( )。

(2 分)
原创 2026 · 单选 第84题 | 知识点 KJ-31d
第 85 题 单选 未作答

补全下面二分的中点计算:

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56};
02int x = 8;
03int l = 0, r = 7;
04int res = -1;
05while (l <= r) {
06    int mid = /* 1 */;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}

空位 /* 1 */ 处应填( )。

(2 分)
原创 2026 · 单选 第85题 | 知识点 KJ-31d
第 86 题 单选 未作答

补全下面二分查找的区间收缩:

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56};
02int x = 23;
03int l = 0, r = 7;
04int res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) /* 1 */ ;
09    else r = mid - 1;
10}

空位 /* 1 */ 处应填( )。

(2 分)
原创 2026 · 单选 第86题 | 知识点 KJ-31d
第 87 题 单选 未作答

「求最大可行答案」的二分答案中,补全可行分支的动作:

01int l = 0, r = 1000000, ans = 0;
02while (l <= r) {
03    int mid = (l + r) / 2;
04    if (check(mid)) { /* 1 */ ; l = mid + 1; }
05    else r = mid - 1;
06}
07cout << ans;

空位 /* 1 */ 处应填( )。

(2 分)
原创 2026 · 单选 第87题 | 知识点 KJ-31d
第 88 题 单选 未作答

砍树问题的 check(cut) 统计截得的木材总量,补全累计式:

01int h[] = {20, 15, 10, 17};
02int n = 4, cut = 15;
03int total = 0;
04for (int i = 0; i < n; i++)
05    if (h[i] > cut) total += /* 1 */ ;

空位 /* 1 */ 处应填( )。

(2 分)
原创 2026 · 单选 第88题 | 知识点 KJ-31d
第 89 题 单选 未作答

补全浮点二分求平方根的循环条件:

01double x = 2.0;
02double l = 0, r = 2.0;
03while (/* 1 */) {
04    double mid = (l + r) / 2;
05    if (mid * mid <= x) l = mid;
06    else r = mid;
07}
08cout << (l + r) / 2;

空位 /* 1 */ 处应填( )。

(2 分)
原创 2026 · 单选 第89题 | 知识点 KJ-31d
第 90 题 单选 未作答

01int a[] = {5, 1, 9, 3, 7};
02sort(a, a + 5);
03int x = 7;
04int l = 0, r = 4, res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << res;

输出是( )。

(2 分)
原创 2026 · 单选 第90题 | 知识点 KJ-31d
第 91 题 单选 未作答

01int a[] = {1, 2, 2, 2, 2, 5, 6};
02int x = 2;
03int lo = 0, hi = 7;
04while (lo < hi) {
05    int mid = (lo + hi) / 2;
06    if (a[mid] >= x) hi = mid;
07    else lo = mid + 1;
08}
09int up = lo;
10lo = 0; hi = 7;
11while (lo < hi) {
12    int mid = (lo + hi) / 2;
13    if (a[mid] > x) hi = mid;
14    else lo = mid + 1;
15}
16cout << up << " " << lo << " " << (lo - up);

输出是( )。

(2 分)
原创 2026 · 单选 第91题 | 知识点 KJ-31d
第 92 题 单选 未作答

01int a[] = {2, 5, 8, 12, 16};
02int x = 13;
03int l = 0, r = 4;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] < x) l = mid + 1;
07    else r = mid;
08}
09if (l > 0 && x - a[l - 1] <= a[l] - x) cout << a[l - 1];
10else cout << a[l];

输出是( )。

(2 分)
原创 2026 · 单选 第92题 | 知识点 KJ-31d
第 93 题 单选 未作答

01int a[] = {0, 1, 3, 4, 5};    // 本应是从 0 开始的连续数,缺了一个
02int l = 0, r = 4, ans = 5;
03while (l <= r) {
04    int mid = (l + r) / 2;
05    if (a[mid] == mid) l = mid + 1;
06    else { ans = mid; r = mid - 1; }
07}
08cout << ans;

输出是( )。

(2 分)
原创 2026 · 单选 第93题 | 知识点 KJ-31d
第 94 题 单选 未作答

二分查找代码中,lrmid 的身份是( )。

(2 分)
原创 2026 · 单选 第94题 | 知识点 KJ-31d
第 95 题 单选 未作答

「找最后一个满足条件的位置」的二分中,写了 l = mid 但中点仍是 (l + r) / 2,当区间收缩到只剩两个元素 [l, l+1]a[mid] <= x 时会发生的现象是( )。

(2 分)
原创 2026 · 单选 第95题 | 知识点 KJ-31d
第 96 题 单选 未作答

lr 都是接近 int 上限的大数时,(l + r) / 2 出错,避免这个问题的正确写法是( )。

(2 分)
原创 2026 · 单选 第96题 | 知识点 KJ-31d
第 97 题 单选 未作答

升序数组二分查找中,把 a[mid] < x 的分支误写成 r = mid - 1,可能的后果是( )。

(2 分)
原创 2026 · 单选 第97题 | 知识点 KJ-31d
第 98 题 单选 未作答

对无序数组直接使用标准二分查找,结果是( )。

(2 分)
原创 2026 · 单选 第98题 | 知识点 KJ-31d
第 99 题 单选 未作答

「求最大可行答案」的二分答案中,check(mid) 为真时误写成了 r = mid - 1,后果是( )。

(2 分)
原创 2026 · 单选 第99题 | 知识点 KJ-31d
第 100 题 单选 未作答

二分循环结束后,直接使用循环内的 mid 变量(如输出 a[mid])的问题是( )。

(2 分)
原创 2026 · 单选 第100题 | 知识点 KJ-31d