top1编程
← 返回题目
题解

【入门】求各个科目成绩的平均分

1 条题解

  • 0
    @ 2026-7-31 11:48:27

    解题思路

    题目要求计算 n 个同学语文、数学、英语三科的平均分,各保留一位小数。

    思路:

    1. 用一个二维数组存成绩:a[i][0] 是第 i 个同学的语文,a[i][1] 是数学,a[i][2] 是英语
    2. 分别把三科的总分累加起来
    3. 各科总分除以人数 n,就得到平均分
    4. 用 fixed 和 setprecision(1) 保留一位小数

    为什么要用 w*1.0/n? 因为 w 是整数,w/n 是整数除法会丢小数。乘 1.0 变成小数,结果才是正确的平均值。

    fixed 和 setprecision 是什么? 它们是 iomanip 库里的控制符:fixed 表示固定小数位,setprecision(1) 表示保留 1 位小数。

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n, a[100][100];
        cin >> n;
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 3; j++) {
                cin >> a[i][j];
            }
        }
    
        int w = 0, s = 0, y = 0;
        for (int i = 0; i < n; i++) w += a[i][0];  // 语文
        for (int i = 0; i < n; i++) s += a[i][1];  // 数学
        for (int i = 0; i < n; i++) y += a[i][2];  // 英语
    
        cout << fixed << setprecision(1)
             << w * 1.0 / n << " "
             << s * 1.0 / n << " "
             << y * 1.0 / n;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),读入和累加都是线性
    • 空间复杂度:O(N),二维数组存成绩
    • 1