思路
枚举 19600101 到20591231这个区间的数
获得年月日 判断是否合法
如果合法
关于题目给出的日期 有三种可能
年/月/日
日/月/年
月/日/年
判断 是否和题目给出的日期符合
如果符合 输出
闰年{
1.被4整除不被100整除
2.被400整除}
补位写法“%02d" 如果不足两位则补零
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check_valid(int year,int month,int day){
if(month==0||month>12){
return false;
}
if(day==0){
return false;
}
if(month!=2){
if(day>days[month]){
return false;
}
}else{
int leap= (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); if(day>28+leap){
return false;
}
}
return true;
}
int main(){
int a,b,c;
scanf("%d/%d/%d",&a,&b,&c);
for(int i=19600101;i<20591231;i++){
int year=i/10000,month=i%10000/100,day=i%100;
if(check_valid(year,month,day)){
if(year%100==a&&month==b&&day==c||
month==a&&day==b&&year%100==c||
day==a&&month==b&&year%100==c
)
printf("%02d-%02d-%02d\n",year,month,day);
}
}
return 0;
}