阴阳相易


私信TA

用户名:gouchao

访问量:19322

签 名:

楼上小心你的分数了,我即将爆掉你的菊花

等  级
排  名 221
经  验 6331
参赛次数 2
文章发表 18
年  龄 0
在职情况 待业
学  校
专  业

  自我简介:

解题思路:

//如果能把日期转换成整数,比较大小就比较方便了,排序就好操作和理解了
//每一个日期的时间  ==( 年份 * 12 + 月份-1)* 31 + 天数
//其实月份可以不减一,也可以乘以30,这都无所谓,主要是好理解

注意事项:

//打印输出的时候,需要注意月份和天数小于10天的时候,需要加上前导0

参考代码:

#include <stdio.h>

typedef struct mytime{
    int year;
    int month;
    int day;
} TIME;

long time_all(TIME a){    //此函数的目的是将日期装换成整数,用于排序是的比较
    long x = (a.year * 12 + a.month) * 31 + a.day;
    return x;
}

int main(void){
    TIME list[100];    //结构体数组,用于保存输入的数据
    
    int i= 0;
    while(1){
        if(EOF != scanf("%d/%d/%d",&list[i].month,&list[i].day,&list[i].year))
            i++;
        else break;
    }
    //循环结束后,i 的值,就是输入的日期的个数
    
    //这里开始排序,我使用了简单的选择排序,可以用其它方法
    int j,k;
    int min;
    TIME tmp;
    for(j = 0;j<i-1;j++){
        min = j;
        for(k = j+1;k<i;k++){
            
            if(time_all(list[k]) < time_all(list[min])){
                min = k;
            }
        }
        
        if(min != j){
            tmp = list[j];
            list[j] = list[min];
            list[min] = tmp;
        }
    }
    //这里是格式化输出
    for(j = 0;j<i;j++){
        if(list[j].month< 10) printf("0%d/",list[j].month);
        else printf("%d/",list[j].month);
        if(list[j].day< 10) printf("0%d/",list[j].day);
        else printf("%d/",list[j].day);
        printf("%d\n",list[j].year);
    }
    
    return 0;
}


 

0.0分

4 人评分

  评论区

  • «
  • »