一.题目描述:
输入一个正整数N代表国家个数,紧接着输入国家名称,该国家获得金牌数目,获得银牌数目,获得铜牌数目。然后根据输入输出国家获奖排名,排名规则是首先按金牌排名,如果金牌相同则比较银牌,如果银牌也相同,则比较铜牌数目,否则按照输入顺序输出排名。
二.输入输出样例:
输入:
China 32 28 34
England 12 34 22
France 23 33 2
Japan 12 34 22
Rusia 23 43 0
输出:
China
Rusia
France
England
Japan
三.解题思想:首先这题要求用c语言实现,所以可以采用c语言中的结构体来存储各个国家的名称以及获奖情况,然后进行排序。常见的排序算法有很多,这题中采用冒泡排序,只不过所用的冒泡排序是添加了一些条件的排序。
关于冒泡排序:外循环为排序趟数,len个元素需要进行len-1趟。内循环为每趟需要比较的次数,第i趟需要比较len-i次。注意在写两层循环的时候,这样写:for(int i=0;i
四.带注释的代码:
#include
#include
//定义一个结构体
struct AwardState
{
char str[21]; //用来存储国家名称
int G; //用来存储金牌数量
int S; //用来存储银牌数量
int B; //用来存储铜牌数量
}ST[21];//定义了一个结构体数组
int main()
{
struct AwardState Temp;//定义一个结构题变量,用来交换
int n;//输入一个数n,表示国家数量
scanf("%d", &n);
//输入各个国家名称以及每个国家获奖情况
int i=0;
//循环输入n个国家的名称以及获奖情况
for(;i0)
{
Temp=ST[e];
ST[e]=ST[e+1];
ST[e+1]=Temp;
}
}
}
}
}
}
//输出排序后的结果
int k=0;
for(;k
四.程序运行结果: