• Olympic Game


    每次奥运会期间,大家都非常关注奖牌榜排名的情况。

    现在我们假设奖牌榜的排名规则,按优先级从高到低如下:

    1. 金牌 数量多的排在前面;
    2. 银牌 数量多的排在前面;
    3. 铜牌 数量多的排在前面;
    4. 若以上三个条件仍无法区分名次,则以国家名称的字典序排列。

    我们假设国家名称不超过20个字符、各种奖牌数不超过100,且大于等于0。

    输入描述

    第一行输入一个整数N(0<N<21),代表国家数量;

    然后接下来的N行,每行包含一个字符串Namei表示每个国家的名称,和三个整数Gi、Si、Bi
    分别表示每个获得的金、银、铜牌的数量,以空格隔开,如(China 51 20 21)。

    输出描述

    输出奖牌榜的依次顺序,只输出国家名称,各占一行。

    样例输入

    5
    China 32 28 34
    England 12 34 22
    France 23 33 2
    Japan 12 34 25
    Rusia 23 43 0
    

    样例输出

    China
    Rusia
    France
    Japan
    England
    

    代码实现

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    typedef struct  country {
        char name[20];
        int gold;
        int silver;
        int bronze;
    }Ctry;
    
    // 交换array1与array2的值
    void SwitchCtry(Ctry *array1, Ctry *array2)
    {
        Ctry temp;
        
        if(!array1 || !array2)
        {
            return;
        } 
        temp = *array1;
        *array1 = *array2;
        *array2 = temp;
    }
    
    // 对array数组按照规则进行排序
    void Sort(Ctry *array, int n)
    {
        
        for(int i = 0; i < n - 1; i++)
        {
            for(int j = i + 1; j < n; j++)
            {
                if(array[i].gold < array[j].gold)
                {
                    SwitchCtry(&array[i], &array[j]);
                }
                else if (array[i].gold == array[j].gold)
                {
                    if (array[i].silver < array[j].silver)
                    {
                        SwitchCtry(&array[i], &array[j]);
                    }
                    else if (array[i].silver == array[j].silver)
                    {
                        if (array[i].bronze < array[j].bronze)
                        {
                            SwitchCtry(&array[i], &array[j]);
                        }
                        else if (array[i].bronze == array[j].bronze)
                        {
                            //strcmp()函数用到<string.h>
                            if(strcmp(array[i].name, array[j].name) > 0)
                            {
                                SwitchCtry(&array[i], &array[j]);
                            }
                        }
                    }
                }
            }
        }
    }
    
    int main()
    {
        int n;
        Ctry *array = NULL;
        
        scanf("%d", &n);
        if (n <= 0 || n >= 21)
        {
            return 1;
        }
        // 开辟结构体指针空间
        array = (Ctry *)malloc(n * sizeof(Ctry));
        if(array == NULL)
        {
            return 1;
        }
        // 获取输入值
        for(int i = 0; i < n; i++)
        {
            scanf("%s %d %d %d", array[i].name, &array[i].gold, &array[i].silver, &array[i].bronze);
        }
        
        Sort(array, n);
        // 打印输出结果
        for (int j = 0; j < n; j++)
        {
            printf("%s
    ", array[j].name);
        }
        // 释放指针
        free(array);
        // 指针释放后置NULL
        array = NULL;
        
        return 0;
    }
    

    个人主页:

    www.codeapes.cn

  • 相关阅读:
    Masonry介绍与使用实践:快速上手Autolayout
    iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
    FMDB的使用方法
    ViewController的生命周期分析和使用
    使用Xcode7的Instruments检测解决iOS内存泄露
    IOS比较常用的第三方组件及应用源代码(持续更新中)
    SDWebImage的简单使用
    ant编译tomcat-web项目
    git命令记录
    zabbix问题恢复正常,但是图表中还是显示故障存在
  • 原文地址:https://www.cnblogs.com/codeapes666/p/12093766.html
Copyright © 2020-2023  润新知