纯纯暴力,写的想吐,玛德服了。
但是复习了vector去重方法,日期的合法性判断。
cpp
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int> res;
string s;
int d[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int leap(int year)
{
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return 1;
else return 0;
}
int check(int year, int month, int data)
{
if(year < 1960 || year > 2059) return -1;
if(month < 1 || month > 12) return -1;
if(data <= 0) return -1;
if(month == 2){
if(data > leap(year) + d[month]) return -1;
}else{
if(data > d[month]) return -1;
}
int res = (year * 100 + month ) * 100 + data;
return res;
}
int main()
{
cin >> s;
int a = (s[0] - '0') * 10 + s[1] - '0';
int b = (s[3] - '0') * 10 + s[4] - '0';
int c = (s[6] - '0') * 10 + s[7] - '0';
if(check(1900 + a, b, c) != -1) res.push_back(check(1900 + a, b, c));
if(check(2000 + a, b, c) != -1) res.push_back(check(2000 + a, b, c));
if(check(1900 + c, a, b) != -1) res.push_back(check(1900 + c, a, b));
if(check(2000 + c, a, b) != -1) res.push_back(check(2000 + c, a, b));
if(check(1900 + c, b, a) != -1) res.push_back(check(1900 + c, b, a));
if(check(2000 + c, b, a) != -1) res.push_back(check(2000 + c, b, a));
sort(res.begin(), res.end());
res.erase(unique(res.begin(), res.end()), res.end());
for(int i = 0; i < res.size(); i ++){
int year = res[i] / 10000;
int month = res[i] % 10000 / 100;
int data = res[i] % 100;
cout << year << "-";
if(month >= 0 && month <= 9) cout << 0 << month << "-";
else cout << month << "-";
if(data >= 0 && data <= 9) cout << 0 << data << endl;
else cout << data << endl;
}
return 0;
}