您的位置:首页 > 其它

SDNU_ICPC1028(结构体排序)

2017-10-28 23:07 309 查看
SDNU-1028

题意:输入n个联系人的名称和生日(月/日/年)然后按年龄大到小排序(同龄按名称升序) 输出n行联系人名称

思路:建立一个结构体类型成员包含联系人姓名,联系人生日月份,年份,定义一个这个类型的数组,然后用sort函数对各个联系人按题意排序

代码:

#include <stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string.h>//各种的头文件们
using namespace std;

struct Conper//建立结构体类型
{
char name[53];
int year;
int month;
int day; //结构体的成员们
};//声明结构体类型
bool compare(Conper a,Conper b)//定义一个bool型的函数作为sort排序的标准
{

if(a.year>b.year)return 0;//那个,很重要!年份越大年龄越小,月也是,还有日
else if(a.year<b.year)return 1;
else{
if(a.month>b.month)return 0;
else if(a.month<b.month)return 1;
else{
if(a.day>b.day)return 0;
else if(a.day<b.day)return 1;
else

return strcmp(a.name,b.name)<0;//比较字符串大小的函数

}
}
}

int main()
{
int n,i,j;
Conper a[1010];//定义数组
bool compare(Conper a,Conper b);
scanf("%d\n",&n);
for(i=0;i<n;i++)//输入n组数据
{
scanf("%s %d/%d/%d",&a[i].name,&a[i].month,&a[i].day,&a[i].year);
}
sort(a,a+n,compare);//对数组排序
for(j=0;j<n;j++)
{
printf("%s\n",a[j].name);//按排好的顺序依次输出
}

return 0;
}


未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 结构体