通信录排序。通讯录的结构记录包括:姓名、生日 、电话号码,其中生日 又包括年、月、日这三项。定义一个嵌套的结构类型,输入n(n<10)个联系人的信息,再按他们的年龄从大到小的顺序依次输出其信息。试编写相应的程序。
输入样例:
6
peng 2002 11 09 4
wang 2002 11 08 3
tian 2002 10 09 2
bing 2002 11 09 4
ling 2001 11 09 1
sing 2003 01 10 5
输出样例:
ling 2001 11 09 1
tian 2002 10 09 2
wang 2002 11 08 3
bing 2002 11 09 4
peng 2002 11 09 4
sing 2003 01 10 5
我的答案:
#include<stdio.h>
#define MAXN 80
typedef struct contact {
char name[MAXN];
struct birthdate {
int yy;
int mm;
int dd;
} date;
char number[MAXN];
} list;
void AgeSorting(list* a, int n);
int main()
{
list a[MAXN];
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s %d %d %d %s", a[i].name, &a[i].date.yy, &a[i].date.mm, &a[i].date.dd, a[i].number);
}
AgeSorting(a, n);
for (int i = 0; i < n; i++) {
printf("%s %02d %02d %02d %s\n", a[i].name, a[i].date.yy, a[i].date.mm, a[i].date.dd, a[i].number);
}
return 0;
}
void AgeSorting(list* a, int n)
{
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if(a[i].date.yy * 10000 + a[i].date.mm * 100 + a[i].date.dd <= a[j].date.yy * 10000 + a[j].date.mm * 100 + a[j].date.dd){
continue;
}
else {
list t;
t = a[i];
a[i] = a[j];
a[j] = t;
continue;
}
}
}
}