加载中...

题解:P1104 生日

结构体排序题。

注意到此题有多个信息,用普通数组存肯定不行了,所以需要使用结构体。

结构体不能直接比较,所以我们需要手写比较函数。

根据常识我们知道一个人比较年龄分为以下几步:

  1. 比较年份,年份越早年龄越大;

  2. 若年份相同则比较月份,月份越早年龄越大;

  3. 若年月都相同则比较天数,天数越早年龄越大。

最后若两人年龄一样则需根据输入的顺序排序,这个只需要在输入时记一个 \(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;
}
posted @ 2025-10-06 14:03  碎碎念的女巫  阅读(5)  评论(0)    收藏  举报