鱼C论坛

 找回密码
 立即注册
查看: 733|回复: 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 编辑
struct man {
        char name[20];
                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[20];
};

int main() {
        struct man men[20]={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[i].name,&men[i].bth.ymdh.year,&men[i].bth.ymdh.month,&men[i].bth.ymdh.day,men[i].num);
               
                //scanf("%s %4d%2d%2d %s",men[i].name,&year,&month,&day,men[i].num);
                //men[i].bth.ymdh.year=year,men[i].bth.ymdh.month=month,men[i].bth.ymdh.day=day;
        }
        for(int i=0; i<t-1; i++) {
                
                for(int j=i+1; j<t; j++) {
                        
                                        if (men[i].bth.bday>men[j].bth.bday)
                                        {
                                                temp=men[i];
                                                men[i]=men[j];
                                                men[j]=temp;
                                        }
                }
        }
        for(int i=0; i<t; i++) {
                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);

        }
        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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-6 12:04:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-2-6 18:39 编辑
struct man {
        char name[20];
                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[20];
};

int main() {
        struct man men[20]={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[i].name,&men[i].bth.ymdh.year,&men[i].bth.ymdh.month,&men[i].bth.ymdh.day,men[i].num);
               
                //scanf("%s %4d%2d%2d %s",men[i].name,&year,&month,&day,men[i].num);
                //men[i].bth.ymdh.year=year,men[i].bth.ymdh.month=month,men[i].bth.ymdh.day=day;
        }
        for(int i=0; i<t-1; i++) {
                
                for(int j=i+1; j<t; j++) {
                        
                                        if (men[i].bth.bday>men[j].bth.bday)
                                        {
                                                temp=men[i];
                                                men[i]=men[j];
                                                men[j]=temp;
                                        }
                }
        }
        for(int i=0; i<t; i++) {
                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);

        }
        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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

typedef struct{
    char name[20];
    int DOB;
    char contact[20];
}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[i].DOB > arr[j].DOB)
    swap(&arr[i], &arr[j]);
}

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

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 14:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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