求平均成绩
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 110682 Accepted Submission(s): 25433
每个测试实例后面跟一个空行。
2 2 5 10 10 20
7.50 15.00 7.50 15.001
这题 好坑 我原本的思路是这样的 : 用scanf 和 printf 是因为这样比较快 我第一次用这个思路 全部超时 。。。。。 思路如下 将平均成绩 和每个学生的各科成绩储存到一个二维数组内进行计算 结果超时
#include<iostream> #include<stdio.h> #include<iomanip> using namespace std; int main() { int m,n; while(cin>>m>>n,m,n) { double a[100][100]={0}; int k,j,i=0,t=0,b=0,c=0,l; for(j=0;j<m;j++) //输入 for(k=0;k<n;k++) scanf("%lf",&a[j][k]); for(j=0;j<m;j++) { for(k=0;k<n;k++) a[j][n]+=a[j][k]; //每个学生的总成绩 a[j][n]/=n; //每个人的平均成绩
for(l=0;l<n;l++) //计算有多少人合格 { if(a[j][l]>=a[j][n]) t+=1; if(t==n) { i++; t=0; } } if(b==1) printf(" "); printf("%.2f",a[j][n]); //输出每个人的平均成绩 b=1; } printf("\n"); for(k=0;k<n;k++) { for(j=0;j<m;j++) a[m][k]+=a[j][k]; //每门课的总成绩 a[m][k]/=m; //每门课的平均成绩 if(c==1) printf(" "); printf("%.2f",a[m][k]); //输出每门课的平均成绩 c=1; } printf("\n"); printf("%d\n",i); //输出合格的人 } return 0; }
严重超时
第二种思路是看别人的 把 平均成绩和学科成绩放在两个数组里 这样方便多了!!!!一次ac;
#include<iostream> #include<stdio.h> using namespace std; int main() { int m,n; while(cin>>m>>n) { double a[100][100]={0},b[100]={0},c[5]={0}; int k,j,t=0,i=0; for(k=0;k<m;k++) for(j=0;j<n;j++) cin>>a[k][j]; for(k=0;k<m;k++) for(j=0;j<n;j++) b[k]+=a[k][j]; for(j=0;j<n;j++) for(k=0;k<m;k++) c[j]+=a[k][j]; printf("%.2f",b[0]/n); for(k=1;k<m;k++) printf(" %.2f",b[k]/n); cout<<endl; printf("%.2f",c[0]/m); for(j=1;j<n;j++) printf(" %.2f",c[j]/m); cout<<endl; for(k=0;k<m;k++) { for(j=0;j<n;j++) if(a[k][j]>=c[j]/m) t++; if(t==n) i++; t=0; } cout<<i<<endl<<endl; } return 0; }
不过多解释 看来思路真的很重要