Каждый раз во время Олимпийских игр, мы очень обеспокоены индикаторного рейтинг ситуации медалистов.
Теперь предположим, что рейтинг правила таблицы медалей, в порядке убывания приоритета следующим образом:
- Количество жетонов больше, чем верхняя поверхность;
- Количество серебра и более стоя в передней;
- Количество бронзы и более стоя в передней;
- Если вышеперечисленные три условия все еще не в состоянии отличить ранга, места лексикографический порядок названий стран.
Мы предполагаем, что название страны не более 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;
}
Домашняя страница: