GESP 七级 · GESP 202512 C++ 七级 第 7 题

选择题 · 答案 B · 考点:二分查找

← 整套速查表 GESP 七级 全部真题

题目

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

#include <iostream>

int query(int n, int *a, int x) {
    int l = 0, r = n;
    while (l < r) {
        int mid = l + (r - l) / 2;
        if (a[mid] >= x) r = mid;
        else l = mid + 1;
    }

    if (l == n) return -1;
    return l;
}

int main() {
    int n = 10;
    int x = 3;
    int num[] = {1, 2, 2, 3, 3, 4, 5, 5, 6, 7};

    std::cout << query(n, num, x) << "\n";
    return 0;
}
答案:B

考点

二分查找 讲解 →二分查找 真题汇总 →

解题思维

模拟程序执行过程,逐行跟踪变量变化,特别关注循环边界和递归终止条件。

常见错误

模拟执行时注意:① 循环变量的起始和终止值;② 递归的边界条件;③ 数据类型转换和精度问题。

详细解析(节选)

【考点】二分查找|数组索引|边界处理

1. 🎯 考纲定位

本题考查 GESP 七级《算法基础》模块中的二分查找考点。命题人卡住的是绝大多数考生对"下界查找"(lower_bound)的右边界收缩逻辑——70% 的人会误用 r = mid - 1,导致在重复元素时定位错误。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断