生日C++题解
2026-07-15 19:50:32
发布于:河北
3阅读
0回复
0点赞
sort好题,数据水。
首先我们要定义一个结构体:
struct xs{
int y,m,d,id;//id是输入顺序,sort要用。
string s;//名字
}a[305];
why要用结构体:
因为这样y,m,d,s,id是“绑定”的,如果直接定义数组会在排序时让y,m,d,s,id分开。
举个例子(直接写数组):
名字 月
a 5
b 3
c 1
排升序后是:
a 1
b 3
c 5
不对应。
然后写一个比较(cmp)函数:
bool cmp(xs a,xs b){
if(a.y==b.y){//如果同一年出生,出生月份小的在前。
if(a.m==b.m){//如果同月出生,出生日期小的在前。
if (a.d==b.d)//如果同一天出生,先输入的在前。
return a.id>b.id;
return a.d<b.d;
}
return a.m<b.m;
}
return a.y<b.y;
}
难点讲完了(其实不难)
完整代码:
#include <bits/stdc++.h>
using namespace std;
struct xs{
int y,m,d,id;
string s;
}a[305];
bool cmp(xs a,xs b){
if(a.y==b.y){
if(a.m==b.m){
if (a.d==b.d)
return a.id>b.id;
return a.d<b.d;
}
return a.m<b.m;
}
return a.y<b.y;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].y>>a[i].m>>a[i].d;
a[i].id=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].s<<endl;
}
return 0;//结束
}
这里空空如也







有帮助,赞一个