笔者:“ 以下代码为笔者大一初入C语言的笔记与作业,谨以此记录我的C学习生涯,重要之处皆有注释,若有疑问大可评论区留言。”
题目描述
按时间顺序给出奥运会的获奖情况,根据获奖情况输出当前奥运金牌榜。
输入
第一行一个整数N,代表奖牌的数量。
接下来N行,每行代表国家的名字和奖牌的类型。
为了简化问题,国家名中不存在空格。
N<=500
输出
按金牌数量降序输出每个国家的名称,及金银铜牌的数量,用空格隔开。若金牌数相同,则比较银牌的数量。若金牌银牌的数量都相同,则比较铜牌的数量。
样例输入
10
zhongguo jin
zhongguo tong
meiguo jin
yidali jin
faguo jin
faguo tong
meiguo yin
meiguo yin
eluosi tong
zhongguo jin
样例输出
zhongguo 2 0 1
meiguo 1 2 0
faguo 1 0 1
yidali 1 0 0
eluosi 0 0 1
基本思路
- 本题运用结构体存储数据会更加方便,否则需要创建多个伴生数组存储数据。
- 比较金银铜数量时应使用权重代替3层if嵌套语句,依次给金银铜赋予不同的权重,比较各个国家的权重之和。
- 存储数据的难点为在读入一组新数据时,需要在已有数据结构体数组中遍历是否存过该国家的数据,有则存入,无则创建新的数据结构体。
#include<stdio.h>//按序先存国家名字,遍历数组,如果没有则新占用数组,再存入jin yin tong牌数目,s[1] s[2] s[3]
#include<string.h>
int main(){
struct medal{
char country[1000];
int jin;
int yin;
int tong;
int sum;//代表权重
}s[1000]={
},temp;//temp为后续冒泡排序比较顺序时的缓冲区。
char *cmp[3]={
"jin","yin","tong"};//用于strcmp()内的比较,strcmp无法直接比较字符串。
int m;
int count