杭电2023ACM题目用C语言求问为何WA了。。
ProblemDescription假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩...
Problem Description
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1
这道题两个要注意,一个是一定要用double 才可以通过
一个是最后一定要有一个空行
我自己敲的代码可以运行出那个结果
但是提交ACM那个网站就总是Wrong answer。。
哪里需要改呢。。
#include<stdio.h>
int main()
{
int n,m,i,j,a[100][100];
double ave[100];
while(scanf("%d%d",&n,&m)!=EOF)
{
double sum1,sum2;
int k,num;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
sum1=0;
for(j=0;j<m;j++)
sum1=sum1+a[i][j];
if(i<n-1)
printf("%.2lf ",sum1/n);
else
printf("%.2lf\n",sum1/n);
}
for(j=0;j<m;j++)
{
sum2=0;
for(i=0;i<n;i++)
sum2=sum2+a[i][j];
if(j<m-1)
printf("%.2lf ",sum2/m);
else
printf("%.2lf\n",sum2/m);
ave[j]=sum2/m;
}
k=0;
for(i=0;i<n;i++)
{
num=0;
for(j=0;j<m;j++)
{
if(a[i][j]>=ave[j])
num++;
}
if(num==m)
k++;
}
printf("%d\n\n",k);
}
return 0;
} 展开
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1
这道题两个要注意,一个是一定要用double 才可以通过
一个是最后一定要有一个空行
我自己敲的代码可以运行出那个结果
但是提交ACM那个网站就总是Wrong answer。。
哪里需要改呢。。
#include<stdio.h>
int main()
{
int n,m,i,j,a[100][100];
double ave[100];
while(scanf("%d%d",&n,&m)!=EOF)
{
double sum1,sum2;
int k,num;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
sum1=0;
for(j=0;j<m;j++)
sum1=sum1+a[i][j];
if(i<n-1)
printf("%.2lf ",sum1/n);
else
printf("%.2lf\n",sum1/n);
}
for(j=0;j<m;j++)
{
sum2=0;
for(i=0;i<n;i++)
sum2=sum2+a[i][j];
if(j<m-1)
printf("%.2lf ",sum2/m);
else
printf("%.2lf\n",sum2/m);
ave[j]=sum2/m;
}
k=0;
for(i=0;i<n;i++)
{
num=0;
for(j=0;j<m;j++)
{
if(a[i][j]>=ave[j])
num++;
}
if(num==m)
k++;
}
printf("%d\n\n",k);
}
return 0;
} 展开
1个回答
展开全部
仔细看了你的代码,没有发现有错误的地方。
但是我重新看了一下题目。你是不是理解错了?
第一行包含n个数据,表示n个学生的平均成绩。
应该是每个学生的所有成绩的平均值。但你却是:
sum1/n。这就错了。应该是sum1/m。
第二行包含m个数据,表示m门课的平均成绩。
应该是每门课的所有学生的平均值。你又错了:
sum2/m。应该改为sum2/n。
改了再提交试试。
但是我重新看了一下题目。你是不是理解错了?
第一行包含n个数据,表示n个学生的平均成绩。
应该是每个学生的所有成绩的平均值。但你却是:
sum1/n。这就错了。应该是sum1/m。
第二行包含m个数据,表示m门课的平均成绩。
应该是每门课的所有学生的平均值。你又错了:
sum2/m。应该改为sum2/n。
改了再提交试试。
更多追问追答
追问
谢谢,但是这个问题我后来有发现,也改了过来,还是提交不过。
追答
不会吧?你改了的话,应该是可以通过的。我重写了一下,可以运行节省时间,你提交我写的试试。
/*
3 4
10 11 15 16
20 18 16 17
21 15 14 18
13.00 17.75 17.00
17.00 14.67 15.00 17.00
1
*/
#define N 50
#define M 5
#include <stdio.h>
int main()
{
int n,m,i,j,flag,count,stu[N][M]={0},stusum[N]={0},kesum[M]={0};
double avg[M]={0};
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&stu[i][j]);
stusum[i]+=stu[i][j];
kesum[j]+=stu[i][j];
}
}
for(i=0;i<n;i++)
{
printf("%.2lf%c",stusum[i]/(double)m,(i==n-1)?'\n':' ');
}
for(j=0;j<m;j++)
{
avg[j]=kesum[j]/(double)n;
printf("%.2lf%c",avg[j],(j==m-1)?'\n':' ');
}
for(count=0,i=0;i<n;i++)
{
for(flag=1,j=0;j<m;j++)
{
if((double)stu[i][j]<avg[j])
{
flag=0;break;
}
}
if(flag)
count++;
}
printf("%d\n\n",count);
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询