E 时间排序
Time Limit:1000MS Memory Limit:65535K
题型: 编程题 语言: 无限制
描述
在开发项目的过程当中,经常会遇到这样一个问题,根据时间进行排序。并且当输入的时间格式不规范时, 这个问题变得有些棘手。现在,你需要编写一个程序,实现将给定的时间按时间先后排序后输出。 输入的时间主要有如下几种情况: (1)09:09 (2)05:2 AM (3)3:30 PM 第1种为24小时格式,第2、3种为12小时格式,AM和PM都是大写,时间与字母间有一个空格。
输入格式
一行一个时间,不超过10行
输出格式
排序好的时间
输入样例
09:09 05:2 AM 3:30 PM
输出样例
05:2 AM 09:09 3:30 PM
思路:(其实这道题没有任何难点..如果这句话得罪你,请见谅)我们把一个时间分为 时和分 两个部分用数组存起来(全部转为24小时制存),最后比较小时和分就可以了。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char time[10][10],t[10]; char a1,a2; int s1[10],s2[10];//用s1存储小时(24小时制),用s2存储分钟 int i,j,k=0,len,temp; while(gets(time[k])!=NULL&&k<10) { len=strlen(time[k]); a1=time[k][0];//为什么会有a1,a2?因为譬如9:09和09:09这两个,要存起他的时,就是前两个字符 a2=time[k][1]; if(a1<='9'&&a1>='0'&&a2>='0'&&a2<='9') s1[k]=(a1-'0')*10+(a2-'0'); else if(a1<='9'&&a1>='0'&&a2==':') { s1[k]=a1-'0'; } if(time[k][2]==':') { a1=time[k][3];//这里a1,a2又存‘:’后面的字符 a2=time[k][4]; } else if(time[k][1]==':') { a1=time[k][2]; a2=time[k][3]; } if(a2==' '&&a1>='0'&&a1<='9'||a1<='9'&&a2=='\0'&&a1>='0') s2[k]=a1-'0'; else if(a2<='9'&&a1<='9'&&a1>='0'&&a2>='0') s2[k]=(a1-'0')*10+a2-'0'; for(i=0;i<len;i++) { if(time[k][i]=='P')//只检测是否有‘P’,有就是下午的意思,那么小时就要相应加12 {s1[k]=s1[k]+12;break;} } k++; }//下面两个冒泡是本算法最糟糕的地方,应该用快速排序或者是sort()函数 for(i=0;i<k-1;i++) { for(j=0;j<k-i-1;j++) { if(s1[j]>s1[j+1]) { temp=s1[j]; s1[j]=s1[j+1]; s1[j+1]=temp; temp=s2[j]; s2[j]=s2[j+1]; s2[j+1]=temp; strcpy(t,time[j]); strcpy(time[j],time[j+1]); strcpy(time[j+1],t); } } } for(i=0;i<k-1;i++) { if(s1[i]==s1[i+1]) { if(s2[i]>s2[i+1]) { temp=s1[i]; s1[i]=s1[i+1]; s1[i+1]=temp; temp=s2[i]; s2[i]=s2[i+1]; s2[i+1]=temp; strcpy(t,time[i]); strcpy(time[i],time[i+1]); strcpy(time[i+1],t); } } } for(i=0;i<k;i++) { printf("%s\n",time[i]); } return 0; }