2019年CSP-X复赛真题及题解(T3:统计成绩)

2019年CSP-X复赛真题及题解(T3:统计成绩)

题目描述

n n n 位同学参加了期中考试,考试共有 m m m 门课程。

考试结束之后,老师想知道:每位同学有几门课程达到或超过了课程的班级平均分?

现在,请你帮忙统计一下。

输入格式

第一行,两个正整数 n , m n,m n,m, n n n 表示学生总人数, m m m 表示课程数量。

接下来 n n n 行,每行 m m m 个整数,表示一位同学的成绩。

输出格式

共 n n n 行,每行一个整数,表示该同学达到或超过平均分的课程数量。

输入输出样例 1
输入 1
复制代码
5 3 
81 80 86  
55 74 79  
92 47 99  
50 65 41  
42 61 74
输出 1
复制代码
3
2
2
0
0
说明/提示

3 3 3 门课程的平均分依次为: 64 , 65.4 , 75.79 64,65.4,75.79 64,65.4,75.79;

5 5 5 位同学分别有 3 , 2 , 2 , 0 , 0 3,2,2,0,0 3,2,2,0,0 门课程达到或超过了课程平均分。

对于 100 % 100\% 100% 的数据: 1 ≤ n ≤ 100 , 1 ≤ m ≤ 20 1\leq n\leq 100,1\leq m\leq 20 1≤n≤100,1≤m≤20,输入的成绩 w i , j w_{i,j} wi,j 满足 0 ≤ w i , j ≤ 100 0\leq w_{i,j}\leq 100 0≤wi,j≤100。

思路分析

  1. 需要先算出每一门课的班级平均分,才能判断每位同学每科是否达标。
  2. 输入时用二维数组保存所有成绩,同时用一个一维数组累加每门课的总分。
  3. 平均分 = 总分 ÷ 人数。为了避免浮点数比较带来的精度问题,判断单科成绩是否达到平均分时,等价判断:
    • 成绩 × 人数 ≥ 该科总分
  4. 最后遍历每位同学,统计达标科目数量并输出。

代码实现

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[105][25],s[25];//a存成绩,s存每科总分
int main(){
    cin>>n>>m;//读入人数和科目数
    for(int i=1;i<=n;i++){//遍历学生
        for(int j=1;j<=m;j++){//遍历科目
            cin>>a[i][j];//读成绩
            s[j]+=a[i][j];//累加该科总分
        }
    }
    for(int i=1;i<=n;i++){//遍历每个学生
        int c=0;//达标科目数
        for(int j=1;j<=m;j++){//遍历科目
            if(a[i][j]*n>=s[j]) c++;//成绩*n>=总分即达到平均分
        }
        cout<<c<<"\n";//输出
    }
    return 0;
}

功能分析

  • n 表示学生人数,m 表示科目数量。
  • 二维数组 a 存储所有同学的所有科目成绩,一维数组 s 存储每门课的总分。
  • 先读入数据并累加总分,再对每个同学逐一判断每科成绩是否达标。
  • 判断时使用整数比较 成绩 × n >= 总分,完全等价于 成绩 >= 平均分,且避免了浮点数误差。
  • 时间复杂度为 O(n*m),空间复杂度为 O(n*m)

更多内容请关注专栏:信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转


【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:

https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:

https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:

https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:

https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}