HDU2093考试排名

这里附上原题链接。

解题思路:

如果数量标记是负数或者0则不用处理,如果标记只是正数,只需时间加上这个正数,如果标记中是 a(b)的形式,那么时间就要加上 a + b * m(m是每次错误提交的罚分) 。

解题步骤:

  1. 创建结构体数组,结构体包括参赛者的名字,排名,解题时间。
  2. 输入信息
  3. 对结构体进行排序

AC代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int cmp( const void * a , const void * b ) ;

typedef struct 
{
    char name[ 15 ] ;
    int time ;
    int num ;
    
} Student ;

Student student[ 1010 ] ;

int main()
{
    int n , m , num1 , i , a , b ;
    num1 = 0 ;
    
    scanf("%d %d", &n , &m ) ;
    
    while( scanf("%s",student[num1].name) != EOF )
        {
        student[ num1 ].num = student[ num1 ].time = 0 ;
        for( i = 0 ; i < n ; i++ )
        {	//scanf( "%d(%d)", &a , &b )很好地解决了输入括号的问题
            if( scanf( "%d(%d)", &a , &b ) == 2 )
            {
                student[ num1 ].num++;
                student[ num1 ].time+=( a+b*m ) ;
            }
            else{
                if( a > 0 )
                {
                    student[ num1 ].num++ ;
                    student[ num1 ].time += a ;
                }
            }
        }
        num1++;
    }
    
    qsort( student , num1 ,sizeof( Student ) , cmp ) ;//yongc语言的内置函数对结构体进行排序
    
    for( i = 0 ; i < num1 ; i++ )
        printf( "%-10s %2d %4d\n", student[i].name , student[i].num , student[i].time ) ;
    return 0 ;
}

int cmp(const void *a,const void *b){
    Student * p = ( Student * ) a ;
    Student * q = ( Student * ) b ;
    if( p->num != q->num ) 
        return q->num - p->num ;
    else if( p->time != q->time ) 
        return p->time - q->time ;
    else
    	return strcmp( p->name , q->name ) ;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值