【ACM之旅】球队排名

来源:互联网 发布:java递归求阶乘 编辑:程序博客网 时间:2024/05/08 21:01

一、[题目] 球队排名

时间限制:1.0s   内存限制:512.0MB

问题描述

计算机系学生会体育部组织了一次“酒井杯”足球联赛,有若干支球队参加,现在联赛已经圆满落幕,各队的积分、净胜球、进球数已经计算出来了,现在要你编写一个程序计算各支球队的排名,然后按照名次从高到低的顺序将各个球队的名字打印出来。
球队的规则如下:
1、先比较积分,积分高者名次在前;
2、如果积分相同则比较净胜球,净胜球多者名次在前;
3、如果积分、净胜球都相同则比较进球数,进球数多者名次在前;
4、对于积分、净胜球和进球数都一样的球队,根据他们的名称按照字典顺序排列。
现在假设各个球队的名称都是由大写英文字母组成,并且没有重名的球队。

输入格式

第一行是一个正整数N(2<=N<=10),代表球队的数目
接下来有N行,每一行均包括一个字符串和3个整数,其中字符串代表球队的名称,长度在2与20之间,3个整数依次为球队的积分,净胜球和进球数,其中积分和进球数是0到100间的整数,净胜球的绝对值小于100。

输出格式

共N行,每行输出一个字符串,即球队的名称。

样例输入

4ACMILAN 5 1 5SCHALKE 5 1 7FENERBAHCE 4 -1 7PSV 7 -1 2

样例输出

PSVSCHALKEACMILANFENERBAHCE


二、[代码]:

PS. 球队排名 是一道排序类题目,与之前数列排序 不同的是其为“多级排序”,也就是升级版,因为同样涉及排序操作,我们依然可以利用"标准C快排库函数"进行快速解题,解题的关键就在于充分理解“多级排序”,其实我们只需将执行排序的函数体稍加改变即可,以下列出我的解法。

算法一: 基础库函数法(利用标准C快速排序函数 qsort())

#include<stdio.h>#include<stdlib.h>#include<string.h>struct TeamRecord{  //用于存储球队比赛数据的结构体    char name[21];    int a,b,c;}Team[10] = {0};int cmp(const void *a, const void *b)  //快排函数体{    TeamRecord *ta = (TeamRecord*)a;    TeamRecord *tb = (TeamRecord*)b;    int ra = tb->a - ta->a;    int rb = tb->b - ta->b;    int rc = tb->c - ta->c;    if(ra) return ra; //如果一级比较(积分比较)相等,则进行二级比较,否则返回比较结果    else if(rb) return rb;  //如果二级比较(净胜球)相等,则进行三级比较,否则返回比较结果    else if(rc) return rc;  //如果三级比较(进球数)相等,则进行四级比较,否则返回比较结果    return strcmp(ta->name, tb->name); //第四级比较(进行字符串比较,按字母顺序排列)}int main(){    int i, n;    scanf("%d",&i); n = i;    while(i--){ //依次读入球队比赛数据      scanf("%s %d %d %d", Team[i].name, &Team[i].a, &Team[i].b, &Team[i].c);    }    qsort(Team, n, sizeof(TeamRecord), cmp); //进行排序    while(++i<n){  //对结果进行输出      printf("%s\n", Team[i].name);    }    return 0;}

欢迎评论和转载,转载请注明文章出处,我对此表示最真诚的敬意!
0 0
原创粉丝点击