7-2 通讯录排序 分数 10 作者 C课程组 单位 浙江大学 输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。 输入格式: 输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。 输出格式: 按照年龄从大到小输出朋友的信息,格式同输出。
时间: 2023-05-11 21:04:58 浏览: 312
以下是C知道的回答:
可以使用结构体来存储每个朋友的信息,然后按照年龄从大到小排序输出。具体实现可以使用快速排序算法。
以下是示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 10
#define MAX_NAME_LEN 11
#define MAX_PHONE_LEN 18
typedef struct {
char name[MAX_NAME_LEN];
int year, month, day;
char phone[MAX_PHONE_LEN];
} Friend;
int cmp(const void *a, const void *b) {
Friend *fa = (Friend *)a;
Friend *fb = (Friend *)b;
if (fa->year != fb->year) {
return fb->year - fa->year;
} else if (fa->month != fb->month) {
return fb->month - fa->month;
} else {
return fb->day - fa->day;
}
}
int main() {
int n;
scanf("%d", &n);
Friend *friends = (Friend *)malloc(n * sizeof(Friend));
for (int i = 0; i < n; i++) {
scanf("%s %4d%2d%2d %s", friends[i].name, &friends[i].year, &friends[i].month, &friends[i].day, friends[i].phone);
}
qsort(friends, n, sizeof(Friend), cmp);
for (int i = 0; i < n; i++) {
printf("%s %04d/%02d/%02d %s\n", friends[i].name, friends[i].year, friends[i].month, friends[i].day, friends[i].phone);
}
free(friends);
return 0;
}
阅读全文