hdu 2093 考试排名

误点:认为人数固定,其实是到文件结束为止。

注意:输出的格式使用。

代码如下:

#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;
}

总结:结构体的使用,三次比较排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值