top1编程
← 返回题目
题解

考试分数统计

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4361 考试分数统计(【入门】)

    解题思路

    题目要统计两拨人:分数低于 pp 的人,和分数高于 qq 的人。这是两个独立的统计,一个学生可能同时属于两拨(比如分数恰好既低于 p 又高于 q,不过通常 p<qp<q 时不会发生)。所以两个条件要分开判断,互不影响。

    用两个计数器 lo 和 hi,读入每个学生的分数 ss 后:

    • 如果 s<ps < p,lo 加 1;
    • 如果 s>qs > q,hi 加 1。

    两个判断是并列的 if,不是 else if,因为一个分数可能同时触发两个条件,用 else 会把第二个条件吞掉。

    拿样例来说,p=200p=200,q=260q=260,五个分数 260、300、190、290、280:

    • 低于 200 的只有 190,lo=1;
    • 高于 260 的有 300、290、280,hi=3。 输出 1 3,和样例一致。

    边界情况:分数正好等于 pp 不算低于 pp,正好等于 qq 不算高于 qq,判断时别把等于的情况算进去。分数范围 1~500,人数最多 100,数据很小。

    参考代码

    // 统计低于p分和高于q分的学生人数
    #include <iostream>
    using namespace std;
    
    int main() {
        int n, p, q;
        cin >> n >> p >> q;
        int lo = 0, hi = 0;   // lo:低于p的人数, hi:高于q的人数
        for (int i = 0; i < n; i++) {
            int s;
            cin >> s;
            if (s < p) lo++;
            if (s > q) hi++;
        }
        cout << lo << " " << hi << endl;
        return 0;
    }
    

    复杂度分析

    每个学生处理一次,一共 nn 个学生,所以时间复杂度是 O(n)O(n)(nn 最大 100)。只用了几个整数计数器,没有用数组,额外空间复杂度是 O(1)O(1)。

    • 1