题解:P1104 生日
结构体排序题。
注意到此题有多个信息,用普通数组存肯定不行了,所以需要使用结构体。
结构体不能直接比较,所以我们需要手写比较函数。
根据常识我们知道一个人比较年龄分为以下几步:
-
比较年份,年份越早年龄越大;
-
若年份相同则比较月份,月份越早年龄越大;
-
若年月都相同则比较天数,天数越早年龄越大。
最后若两人年龄一样则需根据输入的顺序排序,这个只需要在输入时记一个 \(level\) 就行。
代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int year,mon,day;
char name[25];
int level;
}f[105];
bool cmp(node x,node y){
if(x.year!=y.year)
return x.year<y.year;//比较年份
if(x.mon!=y.mon) return x.mon<y.mon;//月份
else if(x.day==y.day) return x.level>y.level;//输入顺序
else if(x.day!=y.day) return x.day<y.day;//日期
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>f[i].name>>f[i].year>>f[i].mon>>f[i].day;
f[i].level=i;
}
sort(f+1,f+n+1,cmp);
for(int i=1;i<=n;i++)
cout<<f[i].name<<endl;
return 0;
}

浙公网安备 33010602011771号