排序问题

 https://www.luogu.com.cn/problem/P1104  生日问题笔记

标记:当出现一组数据中有多个数据,这个时候我们常考虑用结构体去编写代码,因为结构体可以使得

几个本不相关的变量联系起来,并且当一个变量改变时,其他变量也会跟着改变,这使得代码变得简单。

使用结构体后,我们在读入数据之后,我们用sort  进行排序,并且构造一个cmp函数,使得我们的排序

满足题目的要求,是年龄从大到小进行排序(年龄大小是从小到大),cmp函数我们在这里考虑用bool

类型函数,因为节省空间,在函数中,我们对数据中的年龄,月份,日期进行逐步判断,对年龄进行排序,

注意题目中有个要求是当相同是我们输出靠后的同学,因此我们设置一个id = i,进行排序,这样自然靠后

的数据就会优先输出。

 

 

 

const int N= 1e5 + 5;
int n;

struct node {
string name;
int year;
int month;
int day;
int id;
} a[N];

bool cmp(node x,node y) {
if(x.year!=y.year) return x.year<y.year;
else if(x.month!=y.month) return x.month<y.month;
else if(x.day!=y.day) return x.day < y.day;
else return x.id>y.id;
}
int main() {
cin >>n;

复制代码
 1 const int N= 1e5 + 5;
 2 int n;
 3 
 4 struct node {
 5 string name;
 6 int year;
 7 int month;
 8 int day;
 9 int id;
10 } a[N];
11 
12 bool cmp(node x,node y) {
13 if(x.year!=y.year) return x.year<y.year;
14 else if(x.month!=y.month) return x.month<y.month;
15 else if(x.day!=y.day) return x.day < y.day;
16 else return x.id>y.id;
17 }
18 int main() {
19 cin >>n;
20 for(int i =0; i<n; i++)
21 cin >>a[i].name >>a[i].year >> a[i].month >>a[i].day,a[i].id=i;
22 sort(a,a+n,cmp);
23 
24 for(int i=0; i <n; i++) cout << a[i].name << endl;
25 
26 return 0;
27 }
复制代码

 

posted @   rw156  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示