首页 > ACM题库 > HDU-杭电 > hdu 2023 求平均成绩[解题报告]C++
2013
12-26

hdu 2023 求平均成绩[解题报告]C++

求平均成绩

问题描述 :

假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。

输入:

输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。

输出:

输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。

样例输入:

2 2
5 10
10 20

样例输出:

7.50 15.00
7.50 15.00
1

http://acm.hdu.edu.cn/showproblem.php?pid=2023

#include <iostream>
using namespace std;
int main()
{
	int n,m;
	float sum=0;
	float a[50][5];
	float obj[5];//每门课程的平均成绩 
	int num=0,cont_obj=0,cont_hum=0;
	while(cin>>n>>m){
		num=0,sum=0;
		cont_obj=0,cont_hum=0;
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				cin>>a[i][j];
			}
		}
		//输出n个学生的平均成绩 
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				sum=sum+a[i][j];
			}
			if(i!=0) cout<<" ";
			printf("%.2f",sum/m);
			sum=0;
		}
		cout<<endl;
		//m门课的平均成绩
		for(int j=0;j<m;j++){
			for(int i=0;i<n;i++){
				sum=sum+a[i][j];
			}
			if(j!=0) cout<<" ";
			printf("%.2f",sum/n);
			obj[num++]=sum/n; 
			sum=0;
		}
		cout<<endl;
		//各科成绩均大于等于平均成绩的学生数量
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++)
				if(a[i][j]>=obj[j]) cont_obj++;
			if(cont_obj==m) cont_hum++;
			cont_obj=0;
		}
		cout<<cont_hum<<endl<<endl;
	}
	return 0;
}

解题转自:http://blog.csdn.net/xujinsmile/article/details/7823361


  1. 我还有个问题想请教一下,就是感觉对于新手来说,递归理解起来有些困难,不知有没有什么好的方法或者什么好的建议?

  2. 第二块代码if(it != mp.end())应改为if(it != mp.end() && (i+1)!=(it->second +1));因为第二种解法如果数组有重复元素 就不正确