蓝桥杯真题:日期问题

输入输出样例

示例

输入

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值