【题目描述】

cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序。但cjf君最近作业很多,没有时间,所以请你帮她排序。

【输入描述】

有2行,

第1行为OI组总人数n;

第2行至第n+1行分别是每人的姓名s、出生年y、月m、日d。

【输出描述】

有n行,

即n个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

【样例输入】

3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1

【样例输出】

Luowen
Yangchu
Qiujingya

【数据规模】

1<n<100

length(s)<20

【参考答案】

#include<bits/stdc++.h>
using namespace std;

struct birthday
{
	string name;  //学生姓名 
 	int year;  //生日的年份 
	int month;  //生日的月 
	int day;  //生日的天 
	int order;	 //用户的输入顺序 
}; 
birthday br[105];  //初始化
bool cmp(birthday x, birthday y)
{
	if(x.year!=y.year)
		return x.year<y.year;  //先按照年份排序(年份小的年龄大) 
	if(x.month!=y.month)
		return x.month<y.month;  //按照月份排序 
	if(x.day!=y.day)
		return x.day<y.day; //按照日排序
	else
		return x.order>y.order; //同年同月同日生,则按照顺序相反输出 
	
}

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>br[i].name>>br[i].year>>br[i].month>>br[i].day; 
		br[i].order=i; //记录顺序 
    } 
    sort(br,br+n,cmp);
	for(int i=0;i<n;i++)
		cout<<br[i].name<<endl;
	return 0; 
	
	
} 



返回目录:题解目录