这题看上去就是比较i的题,但是很多人就是WA在这了,这个一般就是格式的问题,还有就是写细节没有注意。这两者在ACM中是非常重要的。中文题大家都知道怎么回事了。我觉得这题主要是注意两点。
首先是输入问题,因为ACM中一般用到浮点数的都是double很少用到float的,那么如果你用的是数组(在这我用的是),那么对数组输入时就要注意。比如文中的scanf("%lf",&a[i][j]);不要写成了scanf("%f",&a[i][j]);,这是你会发现不仅仅是后面数组的值很怪,就连数组a的值都很怪,这就是细节,习惯。定义的是double,就应该用%lf来输入。
第二点是文中最后他要求每一轮测试数据后面都必须空一行,就是说,最后会有两个空行。还有就是三个数的输出,不要都空行,那样会有presentation Error的
最后就是各个模块的实现了,我想这个对大家来说很简单吧,下面是一个AC的代码。大家可以参考下。
最后提一点就是再求各科大于等于平均值是有两种方法一种是下面例子中的:
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(b[i]>=a[i][j])
leap=1;
else
{
leap=0;
break;
}
}
if(leap==1)
k++;
}
第二种是用累加的思想就是说设一个a=0;有m门课,当有一门课大于等于平均值是a就加一,那么到最后判断a和 m的关系就行了。下面贴个代码:
int y=0,u;
for(int i=0;i<n;i++)
{
u=0;
for(int j=0;j<m;j++)
{
if(a[i][j]>=c[j])
u++;
}
if(u==m)
{y++;}
}//该班级中各科成绩均大于等于平均成绩的学生数量
#include<stdio.h>
#include<string.h>
double a[52][6],b[52],c[52];
int main()
{
int m,n,i,j;
int k,leap;
while(scanf("%d%d",&n,&m)!=EOF)
{ k=leap=0;
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%lf",&a[i][j]);
b[i]+=a[i][j];
}
b[i]/=m;
}
for(j=0;j<m;j++)
{
for(i=0;i<n;i++)
{
c[j]+=a[i][j];
}
c[j]/=n;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(b[i]>=a[i][j])
leap=1;
else
{
leap=0;
break;
}
}
if(leap==1)
k++;
}
for(i=0;i<n;i++)
{
printf("%.2f",b[i]);
if(i<n-1)
printf(" ");
}
printf("\n");
for(j=0;j<m;j++)
{
printf("%.2f",c[j]);
if(j<m-1)
printf(" ");
}
printf("\n");
printf("%d\n\n",k);
}
return 0;
}