输入输出样例
示例
输入
02/03/04
输出
2002-03-04
2004-02-03
2004-03-02
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
分析:读进来一个字符串,由于格式是固定的,用substr分割字符串,然后提取出年月日,对三个数字进行排列求出对应年月日,然后输出就好了。
中间注意闰年的判断和输出的判断:
#include <bits/stdc++.h>
using namespace std;
int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int change(string a)
{
istringstream is(a);
int i;
is>>i;
return i;
}
int trans(int year,int month,int day)
{
if(year>=0&&year<=59) year+=2000;
else if(year>=60&&year<=99) year+=1900;
int total=months[month];
if(month==2&&((year%400==0)||(year%4==0&&year%100!=0)))
{
total+=1;
}
if(month<=0||month>12) return 0;
if(day<=0||day>total) return 0;
return year*10000+month*100+day;
}
void output(int date)
{
cout<<date/10000<<"-";
printf("%02d",date/100%100);
cout<<"-";
printf("%02d\n",date%100);
}
int main()
{
// 请在此输入您的代码
string date;
cin>>date;
string a=date.substr(0,2);
string b=date.substr(3,2);
string c=date.substr(6,2);
int year,month,day;
year=change(a);
month=change(b);
day=change(c);
int dates[3];
dates[0]=trans(year,month,day);
dates[1]=trans(day,year,month);
dates[2]=trans(day,month,year);
sort(dates,dates+3);
for(int i=0;i<3;++i)
{
if(dates[i]&&i==0) output(dates[i]);
else if(dates[i]&&i>0&&dates[i]>dates[i-1]) output(dates[i]);
}
return 0;
}