原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复