生日
【题目描述】
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;
}
(adsbygoogle = window.adsbygoogle || []).push({});