top1编程
← 返回题目
题解

【入门】考试成绩的分布情况

1 条题解

  • 0
    @ 2026-7-31 14:11:02

    解题思路

    题目要求统计全班成绩的平均分、达到平均分的人数、低于平均分的人数。

    思路:

    1. 读入所有成绩,同时累加总分
    2. 平均分 = 总分 ÷ 人数
    3. 再遍历一遍,分别统计 >= 平均分 和 < 平均分的人数
    4. 输出平均分(保留 1 位小数)和两个人数

    为什么要遍历两遍? 第一遍要先算出平均分(需要总分数),第二遍才能拿每个成绩和平均分比较。

    注意:算平均分要用 s * 1.0 / n,让除法变成小数除法,不然整数除法会丢小数。

    举例:成绩 100 98 97 99 90

    • 总分 484,平均 484÷5 = 96.8
    • = 96.8 的有 4 个,< 96.8 的有 1 个

    • 输出 96.8 4 1

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n, a[100], s = 0, c = 0, d = 0;
        double avg;
        cin >> n;
    
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            s += a[i];
        }
    
        avg = s * 1.0 / n;
    
        for (int i = 0; i < n; i++) {
            if (a[i] >= avg) c++;
            if (a[i] < avg) d++;
        }
    
        cout << fixed << setprecision(1) << avg;
        cout << " " << c << " " << d;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),遍历两遍数组
    • 空间复杂度:O(N),一个数组存成绩
    • 1