uva 10194 Football(sort排序)

来源:互联网 发布:编写网站的软件 编辑:程序博客网 时间:2024/06/09 20:31

新手一枚,所以尽量用新手看的懂的方式写

题目大意:输入比赛的数量,分别输入比赛名称,球队数目,球队名称,总共比赛场次,每一场的比分(格式为队伍1#得分@得分#队伍2),输出球队排名。排名的方式为:

  1. 得分数
  2. 获胜场次
  3. 最大净胜球
  4. 最多进球
  5. 最少比赛
  6. 字典序

输出的格式为:Team 名称 得分p, 场次g (胜-平-负), 最大净胜球gd (得球-失球)
像我这样的新手很容易忽略题目中哪些地方要求空格,哪些地方要求有空行隔开输出。须谨慎。
以下是伪代码。

    scanf(比赛数目);    while(T --)        gets(比赛名称);        scanf(球队数目);        //下面使用了gets所以注意用gutter或*c吃掉回车符        for i: 0 to 球队数目-1;            gets(球队[i].name);        scanf(比赛数目);        for i: 0 to 比赛数目-1;            gets(队伍1#得分@得分#队伍2);            调用写好的处理函数handle来处理输入;            /*每一次进行输入时都需要从中读出队伍名,比分情况并进行运算,为了方便阅读最好是写一个处理函数放在for循环中以理清思路并避免main函数的亢长。本人水平有限,函数也是参考了别的大神的代码才勉强有了思路,此处不做赘述以避免版权纠纷。*/        调用排序函数进行排序;(具体下面细说);        for i: 0 to 球队数目-1printf(名次)队伍名称 比赛得分p,比赛场次g,(胜-平-负),最大净胜球gd(得球-失球));            //题目要求各比赛见有空行            printf("\n");    while结束

其中我比较有心得的是sort函数(注意:c语言中默认只有qsort,而c++的sort是其的升级版,使用方面有些许不同,具体还请大家查阅有关资料)。利用自写的cmp函数中顺序语句的先后,可以写出一个很简洁的sort函数。

    bool cmp(Team a, team b){        if(得分不等)        return a.point > b.point;        if(胜场不等)        return a.win > b.win;        if(净胜球不等)        return a.gl > b.gl;        if(场次不等)        return a.ti > b.ti;        /*最后一栏球队名字不会相等。熟悉c++的各位直接用string比较即可。不熟悉则用char数组*/        return a.name < b.name;        }

cmp最后的比较应先将队伍名都转化为小写,上述有疏忽。

0 0
原创粉丝点击