ACM求助 题目 Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成

#include<stdio.h>
int main(void)
{
int n,m,s[50][5],i,j,p,num=0;
double ave1[50],ave2[5],a;
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&s[i][j]);
for(i=0;i<n;i++)
{
a=0;
for(j=0;j<m;j++)
a+=s[i][j];
ave1[i]=a/m;
}
for(j=0;j<m;j++)
{
a=0;
for(i=0;i<n;i++)
a+=s[i][j];
ave2[j]=a/n;
}
for(i=0;i<n;i++)
{
p=0;
for(j=0;j<m;j++)
if(s[i][j]>ave2[j])
p++;
if(p==m)
num++;
}
for(i=0;i<n-1;i++)
printf("%.2lf ",ave1[i]);
printf("%.2lf",ave1[i]);
printf("\n");
for(j=0;j<m-1;j++)
printf("%.2lf ",ave2[j]);
printf("%.2lf",ave2[j]);
printf("\n");
printf("%d\n",num);
printf("\n");

}
return 0;
}
Problem Description
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。

#include <stdio.h>

int main()
{
int n,m; //假设一个班有n(n<=50)个学生,每人考m(m<=5)门课
while(scanf("%d%d",&n,&m)!=EOF)
{
int a[n][m];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}//输入每个学生的各科成绩 

for(i=0;i<n;i++)// n个学生的平均成绩
{
double sum = 0;
for(j=0;j<m;j++)
{
sum += a[i][j];
}
printf("%.2lf",sum/m);
if(i<n-1)//最后一个数据后换行 
printf(" ");
else
printf("\n");
}

double sub_ave[m];//各个科目的平均成绩 

for(j=0;j<m;j++)//m门课的平均成绩
{
double sum = 0;
for(i=0;i<n;i++)
{
sum += a[i][j];
}
sub_ave[j] = sum/n;
printf("%.2lf",sum/n);
if(j<m-1)//最后一个数据后换行
printf(" ");
else
printf("\n");
}

int num=0;//全过及格线的人数 

for(i=0;i<n;i++)
{
int p=0;
for(j=0;j<m;j++)
{
if(a[i][j] >= sub_ave[j])
p++;
}
if(p==m)
num++; 
}

printf("%d\n\n",num);

}
 }

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-24
楼上说的就不对了,
ACM不断WA,就是找不出问题来确实是 挺纠结的。。
给楼主我的代码吧,自己对着找找错。。
#include<stdio.h>
void main()
{
int n,m,i,j,count,s;
double a[51][51],sum1[51],sum2[51];
while(scanf("%d%d",&n,&m)!=EOF)
{
for(j=1;j<=m;j++)
{
sum2[j]=0;
}
for(i=1;i<=n;i++)
{
sum1[i]=0;
for(j=1;j<=m;j++)
{
scanf("%lf",&a[i][j]);
sum1[i]+=a[i][j];
sum2[j]+=a[i][j];
}
}
for(i=1;i<=n;i++)
{
if(i!=n)
printf("%.2lf ",sum1[i]/(double)m);
else
printf("%.2lf",sum1[i]/(double)m);
}
printf("\n");
for(i=1;i<=m;i++)
{
if(i!=m)
printf("%.2lf ",sum2[i]/(double)n);
else
printf("%.2lf",sum2[i]/(double)n);
}
printf("\n");
count=0;
for(i=1;i<=n;i++)
{
s=0;
for(j=1;j<=m;j++)
{
if(a[i][j]>=sum2[j]/(double)n)
s++;
}
if(s==m)
count++;
}
printf("%d\n\n",count);
}
}本回答被提问者采纳
第2个回答  2018-01-25
#include "stdio.h"
 
int main()
{
    int n,m,i,j,x,y=0;
    float p[50][5],psum[50]={0},sum[5]={0},paver[50],aver[5],taver=0;
    printf("请输入这个班有n(n<=50)个学生,每人考m(m<=5)门课:\n");
    while(scanf("%d%d",&n,&m)!=EOF&&m&&n)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                scanf("%f",&p[i][j]);
                psum[i]+=p[i][j];
                sum[j]+=p[i][j];               
            }                  
        }
for(i=0;i<m;i++) 
{
taver+=aver[i];
aver[i]=sum[i]/n;
        paver[i]=psum[i]/m;
}
        for(i=0;i<n;i++)
            if(psum[i]>=taver)
            {
                for(j=0,x=0;j<m;j++)
                {
                    if(p[i][j]<aver[j]) break;
                    x++;
                }
                if(x==m) y++;
            }          
        for(i=0;i<n;i++)
            printf("%.2f   ",paver[i]);
        putchar('\n');
        for(i=0;i<m;i++)
            printf("%.2f   ",aver[i]);
        putchar('\n');
        printf("%d\n",y);
        putchar('\n');
    }
    return 0;         
}

第3个回答  2011-01-30
对于你Y这样的人就不应该告诉你怎么办,碰到个问题就上来问,麻烦大家不说,一点意义都没有,你要是不爱学,就别做这题,老师也不会强迫你.

...假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成...
include <stdio.h>int main(){int n,m; \/\/假设一个班有n(n<=50)个学生,每人考m(m<=5)门课while(scanf("%d%d",&n,&m)!=EOF){int a[n][m];int i,j;for(i=0;i<n;i++){for(j=0;j<m;j++){scanf("%d",&a[i][j]);}}\/\/输入每个学生的各科成绩 for(i=0;i<n;...

HDOJ 2023 提交时Wrong 检查多遍不知道哪里出错了
int score[50][5]; \/\/50个人,数组需要是50,不是49 float b[5];感觉除了这里定义的有点问题(如果输入的是50个人的话,数组会越界)之外,其他也没发现什么问题。或者将while (scanf ("%d %d",&n,&m)!=EOF)去掉,题目里面说的多组测试数据应该不是循环测试吧,有可能是编译出来一个exe,...

acm答案对了,但一直报错。
1、头文件用错了,需要stdlib.h而不是math.h。2、程序无法满足这个要求:如果有多个MM的分数绝对值一样,那么输出排在最前面的一个

一个很简单的ACM题,这个提交后怎么会“Time Limit Exceed”?!_百度知...
我们可以这么做 假设 m = p1^a1 * p2^a2 *..pk^ak..那么它因子的个数就是(a1+1)(a2+1)...(ak+1).因为对于每个pi来说,我们可以选择有ai+1种选择(包括不选,选1个,选2个...选ai个)那么也就是说我们只要对m进行质因素分解就可以了,先打一个素数表prime[],然后对m进行分解,比如...

acm(Presentation Error)
最后一个数后边应该不输出空格吧。再试试下面的代码:include<stdio.h>#include<stdlib.h>int comp ( const void *a, const void *b ){ return *(int *)b-*(int *)a;}int a[1000001]={0};int main(){int num;int count;int i;int b;while(scanf("%d",&num)!=EOF){scanf("...

HDU ACM 2023 Wrong Answer
include<stdio.h>void main(){int x,y;while(scanf("%d%d",&x,&y)>0){double array[51][6];\/\/ 最好用双精度浮点型for(int i=0;i<x;i++){array[i][5]=0;\/\/ array[i][5]要初始化为0for(int j=0;j<y;j++){scanf("%lf",&array[i][j]);\/\/ 这里用%lf读入array[i...

acm题目 结果是一样的但提交 就是 wrong answer! 求解
这个是我以前做的 你自己看看吧 我的是ac了的 include<stdio.h>#define MAXN 50int arr[MAXN][5];double crr[MAXN];int main(){int n,m,i,j,k,t;int num=0;int cum=0;double everyone_ave=0.00;double everyclass_ave=0.00;while(scanf("%d%d",&n,&m)==2){if(n==0|...

杭电OJ 2023题 求平均成绩 提交了N次都是WA,难道是我理解出错了?求高手...
各科成绩 均 大于等于 平均成绩 的学生 是说该学生每一门成绩 都比 这一门课程的平均成绩 高 不是所有课程加起来的平均成绩

航电acm 2009(java) 为什么总是wrong answer
public class Main { \/ Problem Description 数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。Input 输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。Output 对于每组输入数据,输出该数列的和,每个测试实例占一行,...

...http:\/\/www.acm.uestc.edu.cn\/problem.php?pid=1012
using namespace std;int a[1001];int f[1000];int main(){ int i,n,m,x,j,k;a[0]=0;while(cin>>n&&n){ for(i=1;i<=n;i++)cin>>a[i];cin>>m;if(m<5) {cout<<m<<endl;continue;} sort(a,a+n+1);memset(f,-1,sizeof(f));f[0]=0;for(k=0;k<=m-5;k...

相似回答