题意不多说。代码已经写出,用的最笨的方法但不幸的是超时了。Runtime Error。
先把代码放这,然后再思考新算法。
#include<stdio.h>
double a[52][6],c[6];
int main()
{
int m,n;
while(scanf("%d%d",&m,&n) != EOF)
{
int i,j;
double stud1;
for(j = 0;j < n; j++)
for(i = 0;i < m; i++)
scanf("%lf",&a[j][i]);
for(j = 0;j < n; j++)
{
stud1 = 0; //记录每个人的总成绩
for(i = 0;i < m;i ++)
stud1 += a[j][i];
if(j == 0)
printf("%.2lf",stud1/m);
if(j)
printf(" %.2lf",stud1/m);
}
printf("\n");
for(i = 0;i < m; i++)
{
double stud2 = 0; //记录每个课程的总成绩
for(j = 0;j < n; j++)
stud2 += a[j][i];
c[i] = stud2/n; //记录每个课程平均成绩
}
int good = 0; //标记每一课成绩大于平均成绩
for(j = 0;j < n; j++)
{
int t = 1; //t仅仅在这个语句有作用
for(i = 0;i < m; i++)
if(a[j][i] < c[i]) t = 0;
if(t) good ++;
}
printf("%.2lf",c[0]);
for(int i = 1;i < m; i++)
printf(" %.2lf",c[i]);
printf("\n");
if(good)printf("%d\n",good);
}
return 0;
}
今天找到错误了。
初学者不要怀疑是不是系统的问题。就像昨天我以为是二维数组和printf函数比较花时间所以超时了,但是仔细一看是ACCESS_VIOLATION,意思就是程序不严谨。最初我找到了上边的代码m,n的位置错了,提交结果WA。我也比较无奈,但是总算知道是程序的问题了,然后仔细排查。终于找到是good的问题。
且看代码。
#include<stdio.h>
double a[55][10],b[55],c[10];
int main()
{
int m,n;
while(scanf("%d%d",&n,&m) != EOF)
{
int i,j;
double stud1;
for(j = 0; j < n; j++)
for(i = 0; i < m; i++)
scanf("%lf",&a[j][i]);
for(j = 0; j < n; j++)
{
stud1 = 0; //记录每个人的总成绩
for(i = 0; i < m; i ++)
stud1 += a[j][i];
b[j] = stud1/m;
}
for(i = 0; i < m; i++)
{
double stud2 = 0; //记录每个课程的总成绩
for(j = 0; j < n; j++)
stud2 += a[j][i];
c[i] = stud2/n; //记录每个课程平均成绩
}
int good = 0; //标记每一课成绩大于平均成绩
for(j = 0; j < n; j++)
{
int t = 1; //t仅仅在这个语句有作用
for(i = 0; i < m; i++)
if(a[j][i] < c[i])
{
t = 0;
break;
}
if(t)
good ++;
}
printf("%.2lf",b[0]);
for(i = 1; i < n; i ++)
printf(" %.2lf",b[i]);
printf("\n");
printf("%.2lf",c[0]);
for(int i = 1; i < m; i++)
printf(" %.2lf",c[i]);
printf("\n");
printf("%d\n",good);
printf("\n");
}
return 0;
}
最终还是要说一句。
在这个复杂又浮躁的世界,只有自己保持一颗安静的心灵方能积少成多。