原题链接:蓝桥杯2017年第八届真题-日期问题
解题思路:
题比较简答,但比较复杂
注意事项:
1.是否为闰年
2.平月大月
3.对00年的特殊处理
4.相同时间的去除
5.排序
参考代码:
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <set>
using namespace std;
//首先判断是否闰年
set<string>s;
bool isrun(int n)
{
if (n % 100 == 0)
{
if (n % 400 == 0)
return true;
return false;
}
else {
if (n % 4 == 0 && n % 100 != 0)
return true;
return false;
}
}
int string2int(string str)
{
int n;
stringstream ss;
ss << str;
ss >> n;
return n;
}
string int2string(int n)
{
string s;
stringstream ss;
ss << n;
ss >> s;
return s;
}
bool isProData(int mon, int day)
{
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12)
{
if (day <= 31)
return true;
return false;
}
else {
if (day <= 30)
return true;
return false;
}
}
bool isdata(string year, string mon, string day)
{
int yearInt = string2int(year);
int monInt = string2int(mon);
int dayInt = string2int(day);
//先去除月份
if (monInt > 12 || monInt <= 0)
return false;
if (dayInt <= 0 || dayInt >= 32)
return false;
if (yearInt >= 60)
yearInt += 1900;
else
yearInt += 2000;
if (isrun(yearInt))
{
if (monInt == 2)
{
if(dayInt > 0 && dayInt <= 29)
return true;
else {
return false;
}
}
else
{
return isProData(monInt, dayInt);
}
}
//不是闰年
else {
if (monInt == 2)
{
if (dayInt > 0 && dayInt < 29)
return true;
else {
return false;
}
}
else
{
return isProData(monInt, dayInt);
}
}
}
void print(string a, string b, string c)
{
int time1 = string2int(a);
if (time1 >= 60)
time1 += 1900;
else
time1 += 2000;
a = int2string(time1);
s.insert(a + "-" + b + "-" + c);
}
int main()
{
string data;
cin >> data;
string t1, t2, t3;
//取出三个时间
t1 = data.substr(0, 2);
t2 = data.substr(3, 2);
t3 = data.substr(6);
//年月日
if (isdata(t1,t2,t3))
{
print(t1, t2, t3);
}
//月日年
if (isdata(t3, t1, t2))
{
print(t3, t1, t2);
}
//日月年
if (isdata(t3, t2, t1))
{
print(t3, t2, t1);
}
set<string>::iterator it = s.begin();
for (it; it != s.end(); it++)
cout << *it << endl;
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复