求解一个C语言题目,关于结构体的
Description 给出一个班的成绩情况,请计算平均分,并按平均分进行排名。输入 第一行是一个整数K,表示样例个数。每个样例的第一行是两个正整数N(N<=40)和M(M<=10),分别表示班上的人数信息,课程的门数。以后的N行,每行一个字符串和M个整数,字符串表示学生姓名(字符串不超过10个字符,只含英文字母),M个整数表示M门课的成绩。输出 每个样例输出一个排名结果,一行为一个学生的成绩信息。包含3个部分的信息,第一个是一个整数,表示排名,从1开始计数;第二部分是学生的姓名;第三部分是一个浮点数,表示学生的平均成绩,保留1位小数。排名按平均成绩从高到低排列,如果平均成绩相同,按姓名的字典序排列,其排名相同,后面的排名依次后推。三者之间用一个空格隔开,行末无空格。
Sample Input
1
4 2
eric 80 90
rose 70 80
john 80 70
jone 60 60
Sample Output
1 eric 85.0
2 john 75.0
2 rose 75.0
4 jone 60.0
我的代码如下:
#include<stdio.h>
#include<string.h>
struct Student
{
int num;
char name[12];
float score[12];
float average;
};
int main()
{
struct Student stu[45]={};
struct Student temp;
int k,n,m,i,j,p,h,g;
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%d %d\n",&n,&m);
for(j=0;j<45;j++)
{
for(p=0;p<12;p++)
{
stu[j].name[p]='\0';
stu[j].score[p]=0;
}
}
for(j=0;j<n;j++)
{
scanf("%s",stu[j].name);
for(p=0;p<m;p++)
{
scanf("%f",&stu[j].score[p]);
}
for(p=0;p<m;p++)
{
stu[j].average+=stu[j].score[p];
}
stu[j].average=stu[j].average/m;
}
for(j=0;j<n-1;j++)
{
h=j;
for(p=j+1;p<n;p++)
{
if(stu[p].average>stu[h].average)h=p;
}
temp=stu[h];stu[h]=stu[j];stu[j]=temp;
}
for(j=0;j<n-1;j++)
{
h=j;
for(p=j+1;p<n;p++)
{
if(stu[p].average==stu[h].average&&strcmp(stu[h].name,stu[p].name)>0)h=p;
}
temp=stu[h];stu[h]=stu[j];stu[j]=temp;
}
for(j=0;j<n;j++)
{
stu[j].num=j+1;
}
for(j=0;j<n;j++)
{
if(stu[j].average==stu[j+1].average)
stu[j+1].num=stu[j].num;
}
for(j=0;j<n;j++)
{
printf("%d %s %.1f\n",stu[j].num,stu[j].name,stu[j].average);
}
}
return 0;
}
测试了好几个,结果都是对的,交到OJ上就是报wrong anwser,不知道是哪里出了问题,求解!(本人新手,代码可能比较小白,勿怪)