news 2026/6/10 12:08:21

蓝桥杯103 日期问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝桥杯103 日期问题

题目链接:https://www.lanqiao.cn/problems/103/learning/

前置知识

输入解析

要会什么?
会用这一句把 AA/BB/CC 读进来:

int a,b,c; scanf("%d/%d/%d", &a, &b, &c);

要记住什么?
"%d/%d/%d" 的意思是:
先读一个整数,接着必须遇到 / ,再读一个整数,再遇到 / ,再读一个整数
题目格式固定,所以不用担心空格、换行、乱格式
读进来的 a,b,c 都是 0~99 的两位数(比如 02 会读成整数 2)

两位年份到四位年份映射

要会什么?
把两位数的 yy 变成四位数年份:

int fullYear(int yy) { return (yy <= 59) ? (2000 + yy) : (1900 + yy); }

要记住什么?
题目限定最终年份只能在 1960~2059,所以映射只能是:
00~59 → 2000~2059
60~99 → 1960~1999

条件运算符 ?: 的读法:
条件 ? A : B
条件成立返回 A,否则返回 B

闰年判断

要会什么?
写一个函数判断 y 是否为闰年:

bool isLeap(int y) { return (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0); }

要记住什么?
能被 400 整除是闰年
能被 4 整除且不能被 100 整除也是闰年
其他是平年
运算符优先级:&& 比 || 高,但写括号最稳

月份天数表 + 日期合法性判断

要会什么?
用数组存每月天数,并写 valid(y,m,d) 判断是否合法:

static int md[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; bool valid(int y, int m, int d) { if (y < 1960 || y > 2059) return false; if (m < 1 || m > 12) return false; int days = md[m] + (m == 2 && isLeap(y)); // 闰年2月+1 return d >= 1 && d <= days; }

要记住什么?
md[0]=0 只是占位,让月份 1~12 直接当下标好用。
days = md[m] + (m==2 && isLeap(y))
这里 (m==2 && isLeap(y)) 结果是 true/false,在 C/C++ 里会当 1/0 用。

三种日期格式枚举思想

要会什么?
输入 a/b/c 可能代表三种解释方式,所以只需要枚举这三种:
yy/mm/dd → (fullYear(a), b, c)
mm/dd/yy → (fullYear(c), a, b)
dd/mm/yy → (fullYear(c), b, a)

要记住什么?
这题不是“枚举所有天”,而是“枚举所有解释方式”,最多 3 个候选,极快。
每个候选都用 valid() 筛一下,合法的才收集。

排序 + 去重

要会什么
把收集到的候选日期排序,然后去掉重复项:
sort(ans.begin(), ans.end());
ans.erase(unique(ans.begin(), ans.end()), ans.end());

要记住什么
不用死记位置,知道 unique 会标记重复区起点,erase 删掉这个起点后的所有元素就够了。

容器与数据结构表达

要会什么?
用一个能自动按年-月-日排序的结构存答案:
vector<pair<int, pair<int,int>>> ans; // (y, (m, d))

插入时可以这样:
ans.push_back({y, {m, d}});

要记住什么?
pair 默认比较规则是字典序:

先比 first(年)
年相同再比 second.first(月)
月相同再比 second.second(日)
所以你 sort(ans.begin(), ans.end()) 就会自动按年月日排好

格式化输出

要会什么?
输出成 yyyy-mm-dd,月日补 0:
printf("%d-%02d-%02d\n", y, m, d);

要记住什么?
%02d:宽度 2,不够左侧补 0
3 会输出成 03

完整代码

#include <bits/stdc++.h> using namespace std; int fullYear(int yy) { // 00-59 -> 2000-2059, 60-99 -> 1960-1999 return (yy <= 59) ? (2000 + yy) : (1900 + yy); } bool isLeap(int y) { return (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0); } bool valid(int y, int m, int d) { if (y < 1960 || y > 2059) return false; if (m < 1 || m > 12) return false; static int md[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int days = md[m] + (m == 2 && isLeap(y)); return d >= 1 && d <= days; } int main() { int a, b, c; scanf("%d/%d/%d", &a, &b, &c); vector<pair<int, pair<int,int> > > ans; // (y, (m, d)) int y1 = fullYear(a), m1 = b, d1 = c; // yy/mm/dd int y2 = fullYear(c), m2 = a, d2 = b; // mm/dd/yy int y3 = fullYear(c), m3 = b, d3 = a; // dd/mm/yy if (valid(y1,m1,d1)) ans.push_back(make_pair(y1, make_pair(m1,d1))); if (valid(y2,m2,d2)) ans.push_back(make_pair(y2, make_pair(m2,d2))); if (valid(y3,m3,d3)) ans.push_back(make_pair(y3, make_pair(m3,d3))); sort(ans.begin(), ans.end()); ans.erase(unique(ans.begin(), ans.end()), ans.end()); for (int i = 0; i < ans.size(); ++i) { int y = ans[i].first; int m = ans[i].second.first; int d = ans[i].second.second; printf("%d-%02d-%02d\n", y, m, d); } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:09:13

【原创代码分享】基于TOC(龙卷风-科里奥利力优化算法)-XGBoost的时间序列预测模型【原创代码分享】基于线性回归和XGBoost的混合时间序列分解预测

程序名称&#xff1a;基于TOC-XGBoost的时间序列预测模型 实现平台&#xff1a;python—Jupyter Notebook 代码简介&#xff1a;构建了基于TOC&#xff08;龙卷风-科里奥利力优化算法&#xff09;-XGBoost的时间序列预测模型。原创未发表&#xff0c;注释超详细&#xff0c;几…

作者头像 李华
网站建设 2026/6/9 14:58:39

小程序毕设项目:基于springboot+微信小程序的跑腿小程序的设计与实现(源码+文档,讲解、 调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/9 20:12:05

uos server 1070e都支持那些容器管理工具

今天工作中&#xff0c;领导突然间跑过来问题在uos server上面都支持那些容器管理工具&#xff0c;好尴尬我居然没有回答出&#xff0c;之说大概时docker&#xff0c;podman。领导又问我isulad是什么和docker的区别是啥&#xff0c;又是好尴尬我居然没有回答出&#xff0c;之说…

作者头像 李华
网站建设 2026/6/9 21:21:29

Dubbo :服务上线不影响旧版本的解密

文章目录服务上线怎么不影响旧版本&#xff1f;——闫工的幽默讲解引言&#xff1a;上线如履薄冰&#xff0c;我可是主管&#xff01;问题&#xff1a;上线影响旧版本&#xff1f;这可不行&#xff01;解决方案一&#xff1a;版本号控制什么是版本号&#xff1f;如何实现版本号…

作者头像 李华