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。
思路分析
- 需要先算出每一门课的班级平均分,才能判断每位同学每科是否达标。
- 输入时用二维数组保存所有成绩,同时用一个一维数组累加每门课的总分。
- 平均分 = 总分 ÷ 人数。为了避免浮点数比较带来的精度问题,判断单科成绩是否达到平均分时,等价判断:
- 成绩 × 人数 ≥ 该科总分
- 最后遍历每位同学,统计达标科目数量并输出。
代码实现
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;
}
