牵风 发表于 2022-2-5 11:39:12

还有哪些情况没考虑到

问题 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;
        int year,month,day;
        char num;
};

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

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

        }
        return 0;

}

jhq999 发表于 2022-2-6 12:04:27

本帖最后由 jhq999 于 2022-2-6 18:39 编辑

struct man {
      char name;
                union birthday
                {
                        unsigned long long bday;
                        struct YMDHSTT
                        {
                                unsigned short hour;unsigned short day;unsigned short month;unsigned short year;
                        } ymdh;
               
                };
      birthday bth;
      char num;
};

int main() {
        struct man men={0},temp;
      int t;
      //int year,month,day;
      scanf("%d",&t);
      for(int i=0; i<t; i++) {
                scanf("%s%4hd%2hd%2hd%s",men.name,&men.bth.ymdh.year,&men.bth.ymdh.month,&men.bth.ymdh.day,men.num);
               
                //scanf("%s %4d%2d%2d %s",men.name,&year,&month,&day,men.num);
                //men.bth.ymdh.year=year,men.bth.ymdh.month=month,men.bth.ymdh.day=day;
      }
      for(int i=0; i<t-1; i++) {
               
                for(int j=i+1; j<t; j++) {
                        
                                        if (men.bth.bday>men.bth.bday)
                                        {
                                                temp=men;
                                                men=men;
                                                men=temp;
                                        }
                }
      }
      for(int i=0; i<t; i++) {
                printf("%s %04hd%02hd%02hd %s\n",men.name,men.bth.ymdh.year,men.bth.ymdh.month,men.bth.ymdh.day,men.num);

      }
      return 0;
}
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678

傻眼貓咪 发表于 2022-2-6 22:03:26

#include <stdio.h>

typedef struct{
    char name;
    int DOB;
    char contact;
}Data;

void swap(Data *A, Data *B){ // 对换位置
    Data temp;
    if(A->DOB > B->DOB){
      temp = *A;
      *A = *B;
      *B = temp;
    }
}

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

int main()
{
    int n;
    scanf("%d", &n);
    Data arr; // 通讯录
   
    for(int i = 0; i < n; i++) // 输入
    scanf("%s%d%s", arr.name, &arr.DOB, arr.contact);
   
    sort(n, arr); // 排序
   
    for(int i = 0; i < n; i++) // 输出
    printf("%s %d %s\n", arr.name, arr.DOB, arr.contact);

    return 0;
}
页: [1]
查看完整版本: 还有哪些情况没考虑到