Olympic Game

Каждый раз во время Олимпийских игр, мы очень обеспокоены индикаторного рейтинг ситуации медалистов.

Теперь предположим, что рейтинг правила таблицы медалей, в порядке убывания приоритета следующим образом:

  1. Количество жетонов больше, чем верхняя поверхность;
  2. Количество серебра и более стоя в передней;
  3. Количество бронзы и более стоя в передней;
  4. Если вышеперечисленные три условия все еще не в состоянии отличить ранга, места лексикографический порядок названий стран.

Мы предполагаем, что название страны не более 20 символов, все виды медалей не более 100, и больше или равны 0.

Введите описание

Первая строка входных данных целого числа N (0 <N <21), представляет собой число стран;

Тогда следующих N строк, каждая строка , содержащая строку , которая представляет название каждой страны Namei, и три целых числа Gi, Si, Bi
обозначает число золота, серебра, бронзы , полученные для каждой, разделенных пробелом, например, (Китай 51 20 21).

Выход Описание

Порядок вывод медаль таблица Sequential, только название страны-экспортера, его собственной линия.

ввод пробы

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\n", array[j].name);
    }
    // 释放指针
    free(array);
    // 指针释放后置NULL
    array = NULL;
    
    return 0;
}

Домашняя страница:

www.codeapes.cn

рекомендация

отwww.cnblogs.com/codeapes666/p/12093766.html