问题描述
假设一个班有 n(n<=50)个学生,每人考 m(m<=5)门课,求每个学生的平均成绩和每门课的平 均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
输入
输入数据有多个测试实例,每个测试实例的第一行包括两个整数 n 和 m,分别表示学生数 和课程数。然后是n 行数据,每行包括m 个整数(即:考试分数)。
输出量
对于每个测试实例,输出 3 行数据,第一行包含n 个数据,表示 n 个学生的平均成绩,结果 保留两位小数;第二行包含 m 个数据,表示m 门课的平均成绩,结果保留两位小数;第三 行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。 每个测试实例后面跟一个空行。
样本输入
2 2
5 10
10 20
样本输出
7.50 15.00
7.50 15.00
1
代码
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n,m,t,num;
int i,j;
int c[5];
int s[50];
int score[50][5];
while(cin>>n>>m) {
fill(c,c+5,0); //初始化数组
fill(s,s+50,0);
fill(score[0],score[0]+50*5,0);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
cin >> t;
score[i][j] = t;
c[j] += t; //各学科分数总和
s[i] += t; //各学生分数总和
}
}
for (i = 0; i < n; i++) {
printf("%.2lf ", s[i] * 1.0 / m); //输出各学生的平均分
}
cout<<endl;
for (j = 0; j < m; j++) {
printf("%.2lf ", c[j] * 1.0 / n); //输出各课程的平均分
}
cout<<endl;
num=0;
for(i=0;i<n;i++){ //超过平均分的学生个数
int flag=1;
for(j=0;j<m;j++){
if(score[i][j]<(c[j]*1.0/n)){
flag=0;
break;
}
}
if(flag==1){
num++;
}
}
cout<<num<<endl;
}
return 0;
}