原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45501859
这道题目有点坑啊。。其实这道题目不是很难,但是这道题目在定义变量类型时候都没有说清楚,在定义存储成绩等变量的时候我刚开始用的是float,整个结果运行无误,就是通不过,害我查看代码几十遍,然后还有没有找到什么错误。可真是把我急死了,最后干脆睡个午觉再来看。顿时发觉可能用double类型会通过,修改之后果然不出我所料,竟然AC了。花了这么长时间,尽然错在一个类型上面,我也是醉了。好吧,上面纯属抱怨,下面我就说一下我的代码,我的代码用到了数组初始化函数memset();我是用它来清零的。不懂的可以百度就出来了,下面贴上我的AC代码供大家参考,有疑问,请留言。
#include <iostream>
#include"string.h"
#include<iomanip>
using namespace std;
int main(void)
{
int n,m,*flag,person_num=0;
//必须使用double类型,否则通不过
double *input_score,*indi_aver_score,*subject_aver_score,*indi_total_score,*subject_total_score;
while(cin>>n>>m)
{
flag=new int[n];
input_score=new double[n*m];
//为个人平均成绩和课程平均成绩分配空间
indi_aver_score=new double[n];
subject_aver_score=new double[m];
//为个人总分和每门课程成绩总分分配空间
indi_total_score=new double[n];
subject_total_score=new double[m];
//对个人总分,每门课程成绩总分分配空间,flag用来判断每个人各科成绩均大于等于平均成绩的次数
memset(flag,0,n*sizeof(int));
memset(indi_total_score,0,n*sizeof(double));
memset(subject_total_score,0,m*sizeof(double));
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
//输入每人的各科成绩,并统计每个人总分数,和各门课程总分数
cin>>input_score[i*m+j];
indi_total_score[i]+=input_score[i*m+j];
subject_total_score[j]+=input_score[i*m+j];
}
}
for(int k=0; k<n; k++)
{
//求出每个人的平均成绩,注意这里除的是课程数m,而不是人数n
indi_aver_score[k]=indi_total_score[k]/m;
//格式输出个人平均成绩
if(k==n-1)
cout<<setiosflags(ios::fixed)<<setprecision(2)<<indi_aver_score[k]<<endl;
else
cout<<setiosflags(ios::fixed)<<setprecision(2)<<indi_aver_score[k]<<" ";
}
for(int h=0; h<m; h++)
{
//求出每门课的平均成绩,注意这里除的是人数n,而不是课程数m
subject_aver_score[h]=subject_total_score[h]/n;
//格式输出每门课成绩
if(h==m-1)
cout<<setiosflags(ios::fixed)<<setprecision(2)<<subject_aver_score[h]<<endl;
else
cout<<setiosflags(ios::fixed)<<setprecision(2)<<subject_aver_score[h]<<" ";
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
//判断每人各科成绩均是否大于等于平均成绩,true的话就在每人对应的flag上加1
if(input_score[i*m+j]>=subject_aver_score[j])
{
++flag[i];
}
}
}
for(int k=0; k<n; k++)
{
//如果每人对应的flag都等于课程数,即每个人的每门课都大于等于平均数,则符合要求
if(flag[k]==m)
++person_num;
}
//格式输出每门课都大于等于平均数的人数
cout << person_num <<endl<< endl;
//释放空间
delete input_score;
delete indi_aver_score;
delete indi_total_score;
delete subject_aver_score;
delete subject_total_score;
delete flag;
//清零
person_num=0;
}
return 0;
}