AcWing 1229. 日期问题
原题链接
简单
作者:
冉俊泽
,
2021-02-28 20:45:25
,
所有人可见
,
阅读 379
分析
- 1.有三种情况
- *年月日
- *月日年
- *日月年
- 2.需要判断组成日期是否合法
- 3.日期需要进行排序
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<set>
using namespace std;
set<string> ans;
int md[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
bool isleap(int y)
{
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) return true;
else return false;
}
string to_day(int y, int m, int d)
{
if(y >= 60) y = 1900 + y;
else y = 2000 + y;
if(m > 12 || m == 0) return "";
if(d > 31 || d == 0) return "";
//判断日期是否合法
if(m != 2 && d > md[m]) return "";
if(m == 2)
{//二月需要特殊处理
if(isleap(y) && d > md[m] + 1) return "";
else if(!isleap(y) && d > md[m]) return "";
}
string str1 = to_string(y);
string str2 = to_string(m);
string str3 = to_string(d);
if(str2.size() == 1) str2 = "0" + str2;
if(str3.size() == 1) str3 = "0" + str3;
return str1 + "-" + str2 + "-" + str3;
}
int main()
{
string str;
cin >> str;
int a, b, c;
a = (str[0] - '0') * 10 + (str[1] - '0');
b = (str[3] - '0') * 10 + (str[4] - '0');
c = (str[6] - '0') * 10 + (str[7] - '0');
//三种情况
string str1 = to_day(a, b, c);
string str2 = to_day(c, a, b);
string str3 = to_day(c, b, a);
if(str1 != "") ans.insert(str1);
if(str2 != "") ans.insert(str2);
if(str3 != "") ans.insert(str3);
for(set<string>::iterator it = ans.begin(); it != ans.end(); it++)
cout << (*it) << endl;
return 0;
}