本文最后更新于 38 天前,其中的信息可能已经有所发展或是发生改变。
题目描述
cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。
输入格式
输入共有 n+1 行,
第 1 行为 OI 组总人数 n;
第 2 行至第 n+1 行分别是每人的姓名 s、出生年 y、月 m、日 d。
输出格式
输出共有 n 行,即 n 个年龄从大到小同学的姓名(如果有两个同学年龄相同,输入靠后的同学先输出)。
(打分题目,喜欢输入靠后的先输出)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int pre_days[12]={0,31,60,91,121,152,182,213,244,274,305,335};
int main(){
int n;
cin>>n;
vector<string> name(n);
vector<int> year(n);
vector<int> month(n);
vector<int> day(n);
vector<int> total_day(n);
for(int i = 0;i<n;i++){
cin>>name[i]>>year[i]>>month[i]>>day[i];
total_day[i]=366*year[i]+pre_days[month[i]-1]+day[i];
}
for(int i = 0;i< n-1;i++){
for(int j = 0;j<n-1-i;j++){
if(total_day[j]>total_day[j+1]){
swap(name[j],name[j+1]);
swap(total_day[j],total_day[j+1]);
}
}
}
for(int i = 0;i< n-1;i++){
for(int j = 0;j<n-1-i;j++){
if(total_day[j]==total_day[j+1]){
swap(name[j],name[j+1]);
swap(total_day[j],total_day[j+1]);
}
}
}
for(int i = 0;i < n;i++){
cout<<name[i]<<endl;
}
return 0;
}