0
点赞
收藏
分享

微信扫一扫

1229. 日期问题

毅会 2022-01-20 阅读 49

1229. 日期问题

  1. 从19600101~20591231枚举每个数
  2. 判断是否合法
  3. 判断是否能表示为给定的日期。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a,b,c;
int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int date)	//判断日期是否合法
{
    int year = date / 10000;
    int month = date / 100 % 100;
    int day = date %100;
    if(month==0 || month >12 || (month !=2 &&(day==0 || day > months[month]))) return false;
    if(month==2)
    {
        int leap = (year % 4==0&& year % 100!=0 )||year%400==0;
        if(day ==0 || day >28 + leap) return false;
    }
    return true;
}

int main()
{
    char d;
    cin>>a>>d>>b>>d>>c;
    for(int i=19600101;i<=20591231;i++)
    {
        if(check(i))
        {
            int day = i % 100;
            int month = i / 100 % 100;
            int year = i /10000;
            if(year % 100 == a &&month==b&&day==c ||
                year% 100 ==c && month ==a &&day==b||
                year%100==c && month ==b &&day==a)
                printf("%d-%02d-%02d\n",year,month,day);
        }
    }
}
举报

相关推荐

0 条评论