🔴 一条挂了,而且挂得有道理

👁️ 1 人浏览 💬 0 人评论 ❤️ 添加收藏

(本条路线统一用 g++ -std=c++17 -O0 -Wall 编译)⚠️ 判题机上没有测试框架,所以这一节用一份**最小的脚手架**:一个 CHECK 宏,数着"跑了几条、过了几条、挂了几条"。框架再花哨,核心也是这三个数。被测函数里有一个 off-by-one:

#include <iostream>

static int ran = 0, passed = 0;
#define CHECK(cond) do { ran++; if (cond) passed++; } while (0)

/* 这个函数有个 off-by-one:本该数"大于 line 的",写成了"大于等于" */
static int count_above(const int *a, int n, int line) {
    int c = 0;
    for (int i = 0; i < n; i++) if (a[i] >= line) c++;
    return c;
}

int main() {
    int a[5] = {9, 3, 5, 4, 7};

    CHECK(count_above(a, 5, 8) == 1);   /* 只有 9 —— 这条过得了 */
    CHECK(count_above(a, 5, 4) == 3);   /* 9、5、7 —— 这条会挂,因为 4 也被数进去了 */

    std::cout << ran << "/" << passed << "/" << (ran - passed) << "\n";
    return 0;
}
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论