GESP 五级 · GESP 202506 C++ 五级 第 12 题

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

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

题目

有关下面 C++ 代码的说法,错误的是( )。

double sqrt_binary(long long n, double epsilon = 1e-10) {
    if (n < 0) {
        throw invalid_argument("输入必须为非负整数");
    }

    if (n == 0 || n == 1) return n;

    // 阶段 1
    long long low = 1, high = n;
    long long k = 0;

    while (low <= high) {
        long long mid = (low + high) / 2;
        long long mid_sq = mid * mid;

        if (mid_sq == n) {
            return mid;
        } else if (mid_sq < n) {
            k = mid;
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }

    long long next_k = k + 1;
    if (next_k * next_k == n) {
        return next_k;
    }

    // 阶段 2
    double low_d = (double)k;
    double high_d = (double)(k + 1);
    double mid;

    while (high_d - low_d >= epsilon) {
        mid = (low_d + high_d) / 2;
        double mid_sq = mid * mid;

        if (mid_sq < n) {
            low_d = mid;
        } else {
            high_d = mid;
        }
    }

    double result = (low_d + high_d) / 2;
    long long check_int = (long long)(result + 0.5);
    if (check_int * check_int == n) {
        return check_int;
    }

    return result;
}
答案:D

考点

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

解题思维

位运算:&(与)、|(或)、^(异或)、~(取反)、<<(左移)、>>(右移)。异或性质:a^a=0,a^0=a。

常见错误

区分逻辑运算(&&,||,!)和位运算(&,|,~,!)。左移右移注意符号位的处理(算术右移vs逻辑右移)。负数的位运算要小心。

详细解析(节选)

【考点】二分查找|浮点精度控制|完全平方数判断

🎯 考纲定位(考点定位) GESP 五级《算法与程序设计》二分查找模块第 3 级要求。命题人卡住的是学生"会写整数二分模板,但不会处理浮点二分"——整数二分靠 low≤high 自然终止,浮点二分必须显式控制区间宽度,否则永远收敛不到相等。

🧠 解题思维(拆解与通法) 看到"求平方根"先想:n 是否是完全平方?若是整数二分 k 使 k²≤n<k+1,这是阶段 1。阶段 2 在 [k,k+1] 上继续二分,每次区间减半,直到宽度<epsilon 退出。最后 round 到最近整数再验算,避免浮点误差。通法:整数二分定框架 + 浮点二分求精 + 校验收尾。

🪤 陷阱拆解(命题人的套路) A、B 都正确:阶段 1 找整数部分,阶段 2 找小数部分。C 正确:+0.5 四舍五入后平方验证,就是处理浮点误差。D 错:high_d - low_d >= epsilon 正是浮点二分的终止条件,epsilon 越小精度越高,循环必然收敛,不会死循环。命题人把"整数二分自然终止"的直觉偷换到浮点场景,诱导学生误判。

🔄 反命题思维(教练升华) 把 epsilon 改成固定迭代次数"for(int i=0;i<100;i++)",第二阶段就变成迭代式逼近,答案选法不变。刷到浮点二分题先问:区间怎么收束?有 epsilon 还是固定迭代?

同考点真题

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