蓝桥杯真题:日期问题

蓝桥杯真题:日期问题_第1张图片

输入输出样例

示例

输入

02/03/04

输出

2002-03-04
2004-02-03
2004-03-02

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

分析:读进来一个字符串,由于格式是固定的,用substr分割字符串,然后提取出年月日,对三个数字进行排列求出对应年月日,然后输出就好了。

中间注意闰年的判断和输出的判断:

#include 
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;
  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;
}

你可能感兴趣的:(蓝桥杯,c++,职场和发展)