AcWing 1229. 日期问题【第八届蓝桥杯省赛C++B组,第八届蓝桥杯省赛JAVAB组】
2022/3/21 20:28:34
本文主要是介绍AcWing 1229. 日期问题【第八届蓝桥杯省赛C++B组,第八届蓝桥杯省赛JAVAB组】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
AcWing 1229. 日期问题
- 一、题目链接
- 二、题目分析
- (一)算法标签
- (二)解题思路
- 三、AC代码
- 四、其它题解
一、题目链接
AcWing 1229. 日期问题
二、题目分析
(一)算法标签
模拟 枚举
(二)解题思路
三、AC代码
解法一:
版本一:使用
sort() 和 unique() 的第三个参数
、使用
自定义函数
, 即:通过bool cmp_sort(Date& date1, Date& date2);
和bool cmp_unique(Date& date1, Date& date2);
配合sort(date, date + cnt, cmp_sort);
和unique(date, date + cnt, cmp_unique);
#include <iostream> #include <algorithm> using namespace std; int cnt = 0; struct Date { int y, m, d; // bool operator<(const Date& date) const // { // return y == date.y ? (m == date.m ? d < date.d : m < date.m) : y < date.y; // } // bool operator==(const Date& date) const // { // return y == date.y && m == date.m && d == date.d; // } }date[6]; bool cmp_sort(Date& date1, Date& date2) { return date1.y == date2.y ? (date1.m == date2.m ? date1.d < date2.d : date1.m < date2.m) : date1.y < date2.y; } bool cmp_unique(Date& date1, Date& date2) { return date1.y == date2.y && date1.m == date2.m && date1.d == date2.d; } int days[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; void get(int y, int m, int d) { if (!m || m > 12) return; if (!d) return; if (m != 2) { if (d > days[m]) return; } else { int leap = (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0); if (d > 28 + leap) return; } if (y >= 60) y += 1900; else y += 2000; date[cnt ++] = {y, m, d}; } int main() { int a, b, c; scanf("%d/%d/%d", &a, &b, &c); get(a, b, c); get(c, b, a); get(c, a, b); // 排序 sort(date, date + cnt, cmp_sort); // 去重 int n = unique(date, date + cnt, cmp_unique) - date; for (int i = 0; i < n; i ++ ) printf("%d-%02d-%02d\n", date[i].y, date[i].m, date[i].d); return 0; }
版本二:不使用
sort() 和 unique() 的第三个参数
、使用
struct 运算符重载函数
, 即:通过Date结构体
的成员函数
bool operator<(const Date& date) const
和bool operator==(const Date& date) const
配合sort(date, date + cnt);
和unique(date, date + cnt)
#include <iostream> #include <algorithm> using namespace std; int cnt = 0; struct Date { int y, m, d; bool operator<(const Date& date) const { return y == date.y ? (m == date.m ? d < date.d : m < date.m) : y < date.y; } bool operator==(const Date& date) const { return y == date.y && m == date.m && d == date.d; } }date[6]; // bool cmp_sort(Date& date1, Date& date2) // { // return date1.y == date2.y ? (date1.m == date2.m ? date1.d < date2.d : date1.m < date2.m) : date1.y < date2.y; // } // bool cmp_unique(Date& date1, Date& date2) // { // return date1.y == date2.y && date1.m == date2.m && date1.d == date2.d; // } int days[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; void get(int y, int m, int d) { if (!m || m > 12) return; if (!d) return; if (m != 2) { if (d > days[m]) return; } else { int leap = (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0); if (d > 28 + leap) return; } if (y >= 60) y += 1900; else y += 2000; date[cnt ++] = {y, m, d}; } int main() { int a, b, c; scanf("%d/%d/%d", &a, &b, &c); get(a, b, c); get(c, b, a); get(c, a, b); // 排序 sort(date, date + cnt); // 去重 int n = unique(date, date + cnt) - date; for (int i = 0; i < n; i ++ ) printf("%d-%02d-%02d\n", date[i].y, date[i].m, date[i].d); return 0; }
四、其它题解
AcWing 1229. 日期问题
这篇关于AcWing 1229. 日期问题【第八届蓝桥杯省赛C++B组,第八届蓝桥杯省赛JAVAB组】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)