6
0
0

P1104 生日

2026-01-26
2026-08-13
文章摘要
|

题目描述

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;
}

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论