题解P1104生日

\(\color{blue}{P1104 生日(题目传送门)}\)


这道题的大意是:给出n个人的出生日期,让我们按年龄(就是先比年份,再比月份和日期,这是常识好吧)大小来排序,如果相同则按输入顺序排序。


开始解题

  • 理清题意后,我们只需按题意去模拟即可。

    1. 强大的STL

大家肯定不陌生,STL里面有个sort的函数,格式为

sort(a.begin(),a.end());

然而,sort函数实际上是有3个参数的,除了其实位置和结束位置意外,还有一个用户自定义的cmp函数,当然,这个cmp函数还是需要自己写的,因为sort默认从小到大排,而对于结构体或者从小到大排,则需要用到cmp函数了。具体用法如下:

sort(a+1,a+1+n,cmp);//sort排序
//cmp函数
bool cmp(int x,int y)//从大到小排 
{
    return x>y;
}

具体代码如下:

题解P1104生日_第1张图片

运行结果如下:

题解P1104生日_第2张图片

显然,这样就实现了自定义排序的功能。

2.结构体

这道题,最方便的存储名字即年月日的方法就是用结构体来存,用法见下:

struct node{//struct+结构体名字
//定义这个结构体里的变量
    string name;
    int year;
    int month;
    int day;
    int num;
}a[105];//注意这里的;当然c++里面struct 是自动生成‘;’的,无需再打

这就相当于对一个人的身份信息进行绑定了。

3.代码实现

代码实现就简单了,用结构体存储信息,再sort排序一下就OK了

code:

#include 
using namespace std;
int n;
struct node{//结构体 
    string name;//记录名字 
    int year;//出生年份 
    int month;//出生月份 
    int day;//出生日期 
    int num;//输入顺序 
}a[105];
bool cmp(node x,node y){//cmp排序 注意此处的用法bool cmp(node x,node y)必须用结构体的名字,而不能用a x,a y。 
    if(x.year!=y.year)return x.yeary.num;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].year>>a[i].month>>a[i].day;//结构体读入方法 
        a[i].num=i;//存储顺序 
    }
    sort(a+1,a+1+n,cmp);//sort排序 
    for(int i=1;i<=n;i++)cout<

运行样例结果:
题解P1104生日_第3张图片

没有问题~~~

你可能感兴趣的:(题解P1104生日)