【题目描述】
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; }
返回目录:题解目录