误点:认为人数固定,其实是到文件结束为止。
注意:输出的格式使用。
代码如下:
#include <stdio.h>
#include <string.h>
struct student
{
char name[12];
int time;
int num;
}students[1000];
int main()
{
int i,j,n,m,time1,num1,t=0,ch;
char name1[12],g,change[12];
scanf("%d %d",&n,&m);
while(scanf("%s",name1)!=EOF)
{
strcpy(students[t].name,name1);
students[t].num=0;
students[t].time=0;
for(i=0;i<n;i++)
{
scanf("%d",&time1);
if(time1>0)
{
students[t].num++;
students[t].time+=time1;
if((g=getchar())=='(')
{
scanf("%d",&num1);
getchar();
students[t].time+=m*num1;
}
}
}
t++;
}
for(i=0;i<t;i++)
{
for(j=t-1;j>0;j--)
{
if(students[j].num>students[j-1].num)
{
strcpy(change,students[j-1].name);
strcpy(students[j-1].name,students[j].name);
strcpy(students[j].name,change);
ch=students[j].num;
students[j].num=students[j-1].num;
students[j-1].num=ch;
ch=students[j-1].time;
students[j-1].time=students[j].time;
students[j].time=ch;
}
else if(students[j].num==students[j-1].num)
{
if(students[j].time<students[j-1].time)
{
strcpy(change,students[j-1].name);
strcpy(students[j-1].name,students[j].name);
strcpy(students[j].name,change);
ch=students[j].num;
students[j].num=students[j-1].num;
students[j-1].num=ch;
ch=students[j-1].time;
students[j-1].time=students[j].time;
students[j].time=ch;
}
else if(students[j].time==students[j-1].time)
{
if(strcmp(students[j].name,students[j-1].name)<0)
{
strcpy(change,students[j-1].name);
strcpy(students[j-1].name,students[j].name);
strcpy(students[j].name,change);
ch=students[j].num;
students[j].num=students[j-1].num;
students[j-1].num=ch;
ch=students[j-1].time;
students[j-1].time=students[j].time;
students[j].time=ch;
}
}
}
}
}
for(i=0;i<t;i++)
printf("%-10s %2d %4d/n",students[i].name,students[i].num,students[i].time);
return 0;
}
总结:结构体的使用,三次比较排序。