解题思路:
//如果能把日期转换成整数,比较大小就比较方便了,排序就好操作和理解了 //每一个日期的时间 ==( 年份 * 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 人评分
蛇行矩阵 (C语言代码)浏览:792 |
WU-图形输出 (C++代码)浏览:836 |
关于float,double变量的几点说明浏览:1926 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:985 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:576 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:855 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:683 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:455 |
整数分类 oj上总是wrong answer浏览:687 |
C二级辅导-阶乘数列 (C语言代码)浏览:1831 |