🐤通讯录排序
🏀 题目要求
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。
输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。
🏀 题解
💻step1.定义结构体
struct Friend { char name[10]; int birth; char num[20];//比17大一点 }fri[10];
💻step2.输入n;随后n行 每行给出一个朋友的信息
int main() { int n; scanf("%d",&n); int i = 0; for(i = 0;i<n;i++) { scanf("%s%d%s",fri[i].name,&fri[i].birth,fri[i].num); getchar(); } //继续 return 0; }
💻step3.按照年龄从大到小输出
⭐注意注意注意,年龄越大,yyyymmdd越小
不要算反账!!!
(如20040101的年龄大于20050422的)
就是个选择排序,代码如下
int min = 0,j; for(i = 0;i<n-1;i++) { min = i; for(j = i+1;j<n;j++) { if(r=fri[min].birth>fri[j].birth) { min = j; } } if(i!=min) { struct Friend tem = fri[i]; fri[i] = fri[min]; fri[min] = tem; } }
🐳完整代码
#include<stdio.h> struct Friend { char name[10]; int birth; char num[20]; }fri[10]; int main() { int n; scanf("%d",&n); int i = 0; for(i = 0;i<n;i++) { scanf("%s%d%s",fri[i].name,&fri[i].birth,fri[i].num); getchar(); } int min = 0,j; for(i = 0;i<n-1;i++) { min = i; for(j = i+1;j<n;j++) { if(r=fri[min].birth>fri[j].birth) { min = j; } } if(i!=min) { struct Friend tem = fri[i]; fri[i] = fri[min]; fri[min] = tem; } } for(i = 0;i<n;i++) { printf("%s %d %s\n",fri[i].name,fri[i].birth,fri[i].num); } return 0; }