我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧。上午用了多个测试样例,结果第对的,可还是Runtime Error,于是就搜了一个跟自己差不多的代码,发现方法一样,输出有点差别,改完后就AC,难道真是输出错了,还是for循环多了?等我想明白了再说吧……

题意:给出N个同学(N<=50),M(M<=5)门课程的成绩,求每个学生的平均成绩和每门课的平均成绩,以及各科成绩都大于平均成绩的人数

输入:多个测试样例,第一行:n, m,接着输入n行,m个 成绩

输出:第一行:n个学生的平均成绩,结果保留两位小数。第二行:m门课的平均成绩,结果保留两位小数。第三行:每门课成绩都大于平均成绩的人数

题解:首先考虑到用二维数组来处理,然后分别求出每一行的平均值(即每个学生的平均成绩),每一列的平均值(即每一门课的平均成绩),再进行每个学生每一门课的成绩与该科平均成绩的比较,统计人数。需要注意的是,用二维数组需要多次双重循环,可能会超时,所以要尽力少使用循环,注意输出的格式控制。

难点:(1)在计算每门课的平均成绩时,要注意循环范围,计算的是每一列的平均值。(2)进行成绩与平均成绩比较时要注意循环控制,是每个学生的每一门成绩都大于该课平均成绩才能让标准符号++。(3)在每次计算平津值完后注意将求和变量置为0(无论是列还是行),以便计算下一个。

代码解释:刚开始我是用数组存储每一个学生的平均成绩和每一门课的平均成绩,然后单独输出,结果是Runtime Error,至于到底是输出错误还其他错误,容我再想想……

#include
int main()
{
int a[100][10]; //定义数组记录成绩,数组尽量开大
double b[10]; //因为后面要做比较,用b[10]来存放每门课的平均成绩
int n,m,count,c,k,i,j;
double avg1,avg2; //avg1每个人的平均成绩,avg2每门课的平均成绩
double sum1,sum2; //sum1每个人的总成绩,每门课的总成绩sum2,注意类型声明为double
while(scanf("%d%d",&n,&m)!=EOF)
{
c=0;
avg1=avg2=0;
sum1=sum2=count=0;
for( i=0;i<n;i++) //输入成绩
for( j=0;j<m;j++)
scanf("%d",&a[i][j]);
for( i=0;i<n;i++) //每个人的平均成绩,对每一行求和,除以科数m
{
for( j=0;j<m;j++)
{
sum1+=a[i][j];
}
avg1=sum1/m;
if(i!=0) printf(" "); //输出每个人的平均成绩,注意输出格式
printf("%.2lf",avg1);
sum1=0;
}
printf("\n");
for( i=0;i<m;i++) //每门课的平均成绩,注意i,j,的循环范围,求和是a[j][i];即对每一列求和
{
for( j=0;j<n;j++)
{
sum2+=a[j][i];
}
avg2=sum2/n; //除以人数n
if(i!=0) printf(" "); //输出每门课的平均成绩,注意输出格式
printf("%.2lf",avg2);
sum2=0;
b[c++]=avg2; //把每门课的平均成绩记录到b[10]
}
printf("\n");
for(i=0;i<n;) //把每个学生每门课的成绩与该课平均成绩进行比较
{
k=0;
for(j=0;j<m;j++) { if(a[i][j]>=b[j]) //如果该科成绩大于平均成绩则标志K++
k++;
else
break; //如果有一科不符合则跳出循环,执行下一个学生的判断
}
if(k==m) //如果该学生的所有课成绩都大于平均成绩,则标志count++
count++;
i++; //进行下一个学生的比较
} printf("%d\n",count);//输出人数并换行
printf("\n"); //注意题目要求是每一个实例后跟一个空行
}
return 0;
}

HDU 2023题解分析的更多相关文章

  1. HDU 2023 求平均成绩

    Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU ...

  2. HDU - 5970 题解

    题目链接 HDU - 5970 分析 很显然\(f(x,y)\)与\(f(x+y*k,y)\)的结果相同,因为它们在第一次取模后会变成相同的式子 我们再看一下数据的范围,突破口肯定在\(m\)那里 那 ...

  3. 传递 HDU - 5961 题解

    题目传送门 分析 题目大意:给一个竞赛图,将图分成两部分,判断两部分的图是否符合传递闭包,a->b,b->c,则a->c 这道题用Floyd硬跑的显然n\({^3}\)会T 如果用b ...

  4. HDU1171:Big Event in HDU(多重背包分析)

    通过分析,要使A>=B并且差值最小.所以只要使sum/2的容量下,B最大就Ok了 #include<iostream> #include<cstdio> #include ...

  5. hdu 5185 动态规划 分析降低复杂度

    这题说的是 x[1]+x[2]+x[3]+…+x[n]=n, 这里 0 <= x[i] <= n && 1 <= i <= n x[i] <= x[i+1 ...

  6. 2014年北京网络赛 Instrusive HDU 5040 题解 优先队列

    网赛的时候看了这道题,发现就是平常的那种基础搜索题. 由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒. 那就不能使用简单的队列了,需要使用优先队列才行. 题意 告诉一副地图:一个起点,一个终点, ...

  7. HDU 5984 题解 数学推导 期望

    Let’s talking about something of eating a pocky. Here is a Decorer Pocky, with colorful decorative s ...

  8. hdu 5418 题解

    第一眼看到这题,哇,这不是我刚做完的题吗?大水题!然后 这题表面很水,实际上有点坑. 题意 求经过 $ 1 - n $(不能遗漏) 并且回到 $ 1 $ 的最短路. 在看这题之前我们可以来看下这题 最 ...

  9. HDU 1231 题解

    题面: 最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem ...

随机推荐

  1. Unix/Linux笔记全集

    1:Unix/Linux操作系统概述 要求:理解应用软件和操作系统的区别,掌握系统的Kernel(核心)和shell(外壳)之间的关系以及各自的作用 Solaris:Solaris 是Sun Micr ...

  2. character-RNN模型介绍以及代码解析

    RNN是一个很有意思的模型.早在20年前就有学者发现了它强大的时序记忆能力,另外学术界以证实RNN模型属于Turning-Complete,即理论上可以模拟任何函数.但实际运作上,一开始由于vanis ...

  3. 59 pages的Delphi源码

    http://www.codesc.net/source/list_10_59.shtml

  4. webp 初探

    WebP是Google新推出的影像技术,它可让网页图档有效进行压缩,同时又不影响图片格式兼容与实际清晰度,进而让整体网页下载速度加快. 如果我们能将其应用在现有的图片上,将可以进一步减少图片大小加快页 ...

  5. android中 MediaStore提取缩略图和原始图像

    android中 MediaStore提取缩略图和原始图像 . 欢迎转载:http://blog.csdn.net/djy1992/article/details/10005767 提取图像的Thum ...

  6. system.io.file创建

    在实际开发中,如果用的文件名不能确定位置.或名字.可以使用GUID类来命名函数.Guid 结构标识全局唯一标示符.其NewGuid结构可以初始化一个新历.该方法语法格式如下: public stati ...

  7. SQL(Oracle)日常使用与不常使用函数的汇总

    --日常使用的sql语句和oracle语句,有些相对使用的频率比较高,收藏起来还是比较值得的 -- 绝对值 SQL:) value Oracle:) value from dual -- 2.取整(大 ...

  8. sql Servers数据库基础

    1. 数据库约束包含:     ·非空约束     ·主键约束(PK) primary key constraint 唯一且不为空     ·唯一约束(UQ) unique constraint 唯一 ...

  9. 将Oracle数据库导出为txt格式

    将Oracle数据库导出为txt格式: 方法1: 对于Windows系统,可以采用以下方式: 选择控制面板-->管理工具-->数据源(ODBC),添加一个新的数据源(系统或用户DSN均可) ...

  10. UVa1339 Ancient Cipher

    #include <iostream>#include <string>#include <cstring> // for memset#include <a ...