一个C语言编程的问题,请多多指教
题目是这样的:成绩排名
Acceteped : 1 Submit : 9
Time Limit : 1000 MS Memory Limit : 65536 KB
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
Source
=================================================================================
下面是我写的代码,测试用例已经过了,但提示是WA,我找了很久也没发现问题,试了很多数据,希望大家帮我看看,这是OJ地址http://cie.xtu.,题号是1106,先谢谢了。
#include<stdio.h>
#include<string.h>
struct t{
char n[100];
int c[100];
double avg;
}t[1000];
int main()
{
int ca;
scanf("%d",&ca);
while(ca--)
{
memset(t,0,1000);
int num;//人数
int k;//科目
int i;
int j;
scanf("%d %d",&num,&k);
for(i=0;i<num;i++)
{
double sum=0;
scanf("%s",t[i].n);//输入名字
for(j=0;j<k;j++)
{
scanf("%d",&t[i].c[k]);//输入成绩
sum+=t[i].c[k];
}
t[i].avg=sum/(double)k;
}
int x,y;
for(x=0;x<num-1;x++)//冒泡排序
for(y=x+1;y<num;y++)
{
if(t[x].avg<t[y].avg)
{
struct t temp;
temp=t[x];
t[x]=t[y];
t[y]=temp;
}
}
int flag=1;
for(i=0;i<num;i++)
{
if(i==0)printf("1 ");
else
{
if(t[i].avg==t[i-1].avg)
printf("%d ",flag);
else
{
printf("%d ",i+1);
flag=i+1;
}
}
printf("%s %.1f\n",t[i].n,t[i].avg);
}
}
}