1229. 日期问题
- 从19600101~20591231枚举每个数
- 判断是否合法
- 判断是否能表示为给定的日期。
#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);
}
}
}