鱼C论坛

 找回密码
 立即注册
查看: 919|回复: 2

[已解决]还有哪些情况没考虑到

[复制链接]
发表于 2022-2-5 11:39:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题 K: 通讯录排序
时间限制: 1 Sec  内存限制: 128 MB
提交: 1222  解决: 320
[状态] [提交] [命题人:外部导入]
题目描述
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。


输入
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。


输出
按照年龄从大到小输出朋友的信息,格式同输出。


样例输入 Copy
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
样例输出 Copy
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
#include <stdio.h>

struct man {
        char name[20];
        int year,month,day;
        char num[20];
};

int main() {
        struct man men[20],temp;
        int t;
        scanf("%d",&t);
        for(int i=0; i<t; i++) {
                scanf("%s %4d%2d%2d %s",men[i].name,&men[i].year,&men[i].month,&men[i].day,men[i].num);
        }
        for(int i=0; i<t-1; i++) {
                temp=men[i];
                for(int j=i+1; j<t; j++) {
                        if(men[i].year<men[j].year) {
                                men[i]=men[j];
                                men[j]=temp;
                        } else if(men[i].year==men[j].year) {
                                if(men[i].month<men[j].month) {
                                        men[i]=men[j];
                                        men[j]=temp;
                                } else if(men[i].month==men[j].month) {
                                        if(men[i].day<men[j].day) {
                                                men[i]=men[j];
                                                men[j]=temp;
                                        }
                                }
                        }

                }
        }
        for(int i=t-1; i>=0; i--) {
                printf("%s %4d%02d%02d %s\n",men[i].name,men[i].year,men[i].month,men[i].day,men[i].num);

        }
        return 0;

}
最佳答案
2022-2-6 12:04:27
本帖最后由 jhq999 于 2022-2-6 18:39 编辑
  1. struct man {
  2.         char name[20];
  3.                 union birthday
  4.                 {
  5.                         unsigned long long bday;
  6.                         struct YMDHSTT
  7.                         {
  8.                                 unsigned short hour;unsigned short day;unsigned short month;unsigned short year;
  9.                         } ymdh;
  10.                
  11.                 };
  12.         birthday bth;
  13.         char num[20];
  14. };

  15. int main() {
  16.         struct man men[20]={0},temp;
  17.         int t;
  18.         //int year,month,day;
  19.         scanf("%d",&t);
  20.         for(int i=0; i<t; i++) {
  21.                 scanf("%s%4hd%2hd%2hd%s",men[i].name,&men[i].bth.ymdh.year,&men[i].bth.ymdh.month,&men[i].bth.ymdh.day,men[i].num);
  22.                
  23.                 //scanf("%s %4d%2d%2d %s",men[i].name,&year,&month,&day,men[i].num);
  24.                 //men[i].bth.ymdh.year=year,men[i].bth.ymdh.month=month,men[i].bth.ymdh.day=day;
  25.         }
  26.         for(int i=0; i<t-1; i++) {
  27.                
  28.                 for(int j=i+1; j<t; j++) {
  29.                         
  30.                                         if (men[i].bth.bday>men[j].bth.bday)
  31.                                         {
  32.                                                 temp=men[i];
  33.                                                 men[i]=men[j];
  34.                                                 men[j]=temp;
  35.                                         }
  36.                 }
  37.         }
  38.         for(int i=0; i<t; i++) {
  39.                 printf("%s %04hd%02hd%02hd %s\n",men[i].name,men[i].bth.ymdh.year,men[i].bth.ymdh.month,men[i].bth.ymdh.day,men[i].num);

  40.         }
  41.         return 0;
  42. }
复制代码
  1. 3
  2. zhang 19850403 13912345678
  3. wang 19821020 +86-0571-88018448
  4. qian 19840619 13609876543
  5. wang 19821020 +86-0571-88018448
  6. qian 19840619 13609876543
  7. zhang 19850403 13912345678

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-2-6 12:04:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-2-6 18:39 编辑
  1. struct man {
  2.         char name[20];
  3.                 union birthday
  4.                 {
  5.                         unsigned long long bday;
  6.                         struct YMDHSTT
  7.                         {
  8.                                 unsigned short hour;unsigned short day;unsigned short month;unsigned short year;
  9.                         } ymdh;
  10.                
  11.                 };
  12.         birthday bth;
  13.         char num[20];
  14. };

  15. int main() {
  16.         struct man men[20]={0},temp;
  17.         int t;
  18.         //int year,month,day;
  19.         scanf("%d",&t);
  20.         for(int i=0; i<t; i++) {
  21.                 scanf("%s%4hd%2hd%2hd%s",men[i].name,&men[i].bth.ymdh.year,&men[i].bth.ymdh.month,&men[i].bth.ymdh.day,men[i].num);
  22.                
  23.                 //scanf("%s %4d%2d%2d %s",men[i].name,&year,&month,&day,men[i].num);
  24.                 //men[i].bth.ymdh.year=year,men[i].bth.ymdh.month=month,men[i].bth.ymdh.day=day;
  25.         }
  26.         for(int i=0; i<t-1; i++) {
  27.                
  28.                 for(int j=i+1; j<t; j++) {
  29.                         
  30.                                         if (men[i].bth.bday>men[j].bth.bday)
  31.                                         {
  32.                                                 temp=men[i];
  33.                                                 men[i]=men[j];
  34.                                                 men[j]=temp;
  35.                                         }
  36.                 }
  37.         }
  38.         for(int i=0; i<t; i++) {
  39.                 printf("%s %04hd%02hd%02hd %s\n",men[i].name,men[i].bth.ymdh.year,men[i].bth.ymdh.month,men[i].bth.ymdh.day,men[i].num);

  40.         }
  41.         return 0;
  42. }
复制代码
  1. 3
  2. zhang 19850403 13912345678
  3. wang 19821020 +86-0571-88018448
  4. qian 19840619 13609876543
  5. wang 19821020 +86-0571-88018448
  6. qian 19840619 13609876543
  7. zhang 19850403 13912345678

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-6 22:03:26 | 显示全部楼层
  1. #include <stdio.h>

  2. typedef struct{
  3.     char name[20];
  4.     int DOB;
  5.     char contact[20];
  6. }Data;

  7. void swap(Data *A, Data *B){ // 对换位置
  8.     Data temp;
  9.     if(A->DOB > B->DOB){
  10.         temp = *A;
  11.         *A = *B;
  12.         *B = temp;
  13.     }
  14. }

  15. void sort(size_t n, Data arr[]){ // 排序
  16.     for(int i = 0; i < n-1; i++)
  17.     for(int j = i+1; j < n; j++)
  18.     if(arr[i].DOB > arr[j].DOB)
  19.     swap(&arr[i], &arr[j]);
  20. }

  21. int main()
  22. {
  23.     int n;
  24.     scanf("%d", &n);
  25.     Data arr[n]; // 通讯录
  26.    
  27.     for(int i = 0; i < n; i++) // 输入
  28.     scanf("%s%d%s", arr[i].name, &arr[i].DOB, arr[i].contact);
  29.    
  30.     sort(n, arr); // 排序
  31.    
  32.     for(int i = 0; i < n; i++) // 输出
  33.     printf("%s %d %s\n", arr[i].name, arr[i].DOB, arr[i].contact);

  34.     return 0;
  35. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 02:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表