#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int yyy[3];
struct node
{
int year,month,day;
bool Equal(node b){
if(year == b.year && month == b.month && day == b.day)
return false;
return true;
}
bool operator <(node other) const{
if(year != other.year)
return year < other.year;
else if(month != other.month)
return month < other.month;
else
return day < other.day;
}
}ans[3];
int number;
void input()
{
char s[10];
cin >> s;
sscanf(s, "%d/%d/%d", &yyy[0], &yyy[1], &yyy[2]);
}
bool run(int y)
{
if(!(y%400) || (!(y%4) && (y%100)))
return true;
return false;
}
void Plus(int x, int y, int z)
{
int year[2][13] = {0,31,28,31,30,31,30,31,31,30,31,30,31 , 0,31,29,31,30,31,30,31,31,30,31,30,31};
if(x >= 60)
x += 1900;
else
x += 2000;
if(y <= 12 && y > 0){
if(run(x)){
if(z <= year[1][y] && z!=0){
ans[number].year = x;
ans[number].month = y;
ans[number++].day = z;
}
}
else{
if(z <= year[0][y] && z!=0){
ans[number].year = x;
ans[number].month = y;
ans[number++].day = z;
}
}
}
}
void out()
{
for(int i=0; i<number; i++){
if(i > 0){
if(!ans[i].Equal(ans[i-1]))
continue;
}
cout << ans[i].year << '-';
if(ans[i].month < 10) cout << '0' << ans[i].month << '-';
else cout << ans[i].month << '-';
if(ans[i].day < 10) cout << '0' << ans[i].day << endl;
else cout << ans[i].day << endl;
}
}
int main()
{
input();
Plus(yyy[0],yyy[1],yyy[2]);
Plus(yyy[2],yyy[0],yyy[1]);
Plus(yyy[2],yyy[1],yyy[0]);
sort(ans, ans+number);
out();
return 0;
}
第八届蓝桥杯——日期问题
最新推荐文章于 2022-11-14 13:14:55 发布