输入若干日期,按日期从小到大排序。
输入格式:
本题只有一组测试数据,且日期总数不超过100个。按“MM/DD/YYYY”的格式逐行输入若干日期。
输出格式:
按“MM/DD/YYYY”的格式输出已从小到大排序的各个日期,每个日期占一行。
输入样例:
12/31/2005
10/21/2003
02/12/2004
11/12/1999
10/22/2003
11/30/2005
输出样例:
11/12/1999
10/21/2003
10/22/2003
02/12/2004
11/30/2005
12/31/2005
出处:
ZJUTOJ 1045
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
ps:下方代码在codeblocks上显示不出答案,但在pta测试中可以通过,且答案正确,请谨慎借鉴!!!
#include <stdio.h>
int get_date(char s[])
{
int i=0,sum=0,x=0,year=0;
for(;s[i]!='/';i++)//提取月份,存入sum
{
if(s[i]>='0' && s[i]<='9')
{
x=s[i]-'0';
sum=sum*10+x;
}
}
for(i++;s[i]!='/';i++)//提取日期,存入sum
{
if(s[i]>='0' && s[i]<='9')
{
x=s[i]-'0';
sum=sum*10+x;
}
}
for(;s[i]!='\0';i++)//提取年份,存入sum
{
if(s[i]>='0' && s[i]<='9')
{
x=s[i]-'0';
sum=sum*10+x;
}
}
year=sum%10000;//调整sum中数字的顺序,由月/日/年调为年/月/日
sum/=10000;//如20230101的八位数字可以直接比大小
sum+=year*10000;
return sum;
}
void up_order(int t[],int n)
{
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
if(t[j]<t[i])
{
int tp=t[i];
t[i]=t[j];
t[j]=tp;
}
}
}
int main()
{
int i=0;
int t[100]={0};
char s[100][11];
while(1)
{
if(scanf("%s",s[i])==EOF)
break;
t[i]=get_date(s[i]);
i++;
}
up_order(t,i);//将数组t排升序
for(i=0;t[i]!=0;i++)//遍历数组t,输出日期
{
int j=0;
while(1)
{
if(t[i]==get_date(s[j]))
{
printf("%s\n",s[j]);
break;
}
j++;
}
}
return 0;
}