1028.联系人

来源:互联网 发布:oracle和mysql的优缺点 编辑:程序博客网 时间:2024/05/29 15:19

运用结构体排序,此题能让自己对结构体排序有更加深入的了解,学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计、名次排序之类的题目了。

首先,我们应该先定义一个结构体

然后,再去定一个排序函数

最后调用进行排序就完成了


Description

手机联系人通常都可以按姓名进行排列,SYC突发奇想按年龄进行排列,但是其手头没有每个人的年龄,于是将每个联系人的生日输入进了手机。现在请你帮助SYC实现他的愿望,将给定的联系人按年龄从大到小排列(大一天也是大哦~),如果两人同年同月同日生,那么按姓名升序进行排列。


Input

第一行一个整数N,代表手机中有N个联系人。1<=N<=1000
接下来的N行表示每一个联系人的信息,每一行首先是联系人的名称,然后有一个空格,之后是该联系人的生日(月/日/年)。联系人的姓名不会超过50个字符,只包含英文大写字母。生日均是合法的日期,年份为4位,月份和日期为1~2位。


Output

输出N行,每一行显示该联系人的姓名。


Sample Input

5SYC 1/1/1990ZZK 3/3/1990LZC 4/4/1990LG 02/02/1990WZ 12/12/1990

Sample Output

SYCLGZZKLZCWZ

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct lianxi  //定义结构体
{
    char name[50];
    int day,month,year;
}x[10000];
bool cmp(lianxi x,lianxi y)  //定义排序函数
{
    if(x.year==y.year)
    {
        if(x.month==y.month)
        {
            if(x.day==y.day)
            {
                if(strcmp(x.name,y.name)<0)
                    return 1;
                else return 0;
            }
            else if(x.day<y.day)
                return 1;
            else if(x.day>y.day)
                return 0;

        }
        else if(x.month<y.month)
            return 1;
        else if(x.month>y.month)
            return 0;

    }
    else if(x.year<y.year)
        return 1;
    else if(x.year>y.year)
        return 0;
}
int main()  //进行排序
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        scanf("%s %d/%d/%d",&x[i].name,&x[i].month,&x[i].day,&x[i].year);
    }
    sort(x,x+n,cmp);
    for(int i=0;i<n;i++)
    {
        printf("%s\n",x[i].name);
    }
    return 0;
}


这样就完成了!