蓝桥杯真题—日期问题

[蓝桥杯][2017年第八届真题]日期问题 题目: 题目描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。 比如02/03/04,可能是2002年03月04日、2004年02... 阅读详情

题目

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。

更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

示例

输入描述

一个日期,格式是 "AA/BB/CC" (0≤A,B,C≤9)。

输出描述

输出若干个不相同的日期,每个日期一行,格式是 "yyyy−MM−dd"。多个日期按从早到晚排列。

输入输出样例

输入

02/03/04

输出

2002-03-04
2004-02-03
2004-03-02

分析

枚举

代码解释

isLeapYear 函数:用于判断给定的年份是否为闰年。闰年的判断规则是:能被 4 整除但不能被 100 整除,或者能被 400 整除。

isValidDate 函数:用于判断给定的年、月、日组合是否为合法日期。首先检查年份是否在 1960 年到 2059 年之间,然后检查月份是否在 1 到 12 之间,最后根据月份和是否为闰年确定该月的天数,并检查日期是否在该范围内。

generateDateStr 函数:将年、月、日组合成 yyyy-MM-dd 格式的字符串。如果月份或日期小于 10,则在前面补 0。

processDate 函数:

  • 解析输入的日期字符串,提取出 a、b、c 三个数字。
  • 分别考虑年 / 月 / 日、月 / 日 / 年、日 / 月 / 年三种日期格式,对于每种格式,尝试将年份加上 1900 和 2000,然后调用 isValidDate 函数判断是否为合法日期,如果是,则将其转换为字符串并添加到 dates 向量中。
  • 对 dates 向量进行排序并去重。

main 函数:读取输入的日期字符串,调用 processDate 函数处理该日期,然后输出所有可能的日期。

时间复杂度:O(1)

空间复杂度:O(1)

#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>

// 判断是否为闰年
bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// 判断日期是否合法
bool isValidDate(int year, int month, int day) {
    if (year < 1960 || year > 2059) return false;
    if (month < 1 || month > 12) return false;
    int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (isLeapYear(year)) daysInMonth[2] = 29;
    return day >= 1 && day <= daysInMonth[month];
}

// 生成日期字符串
std::string generateDateStr(int year, int month, int day) {
    std::ostringstream oss;
    oss << year << "-";
    if (month < 10) oss << "0";
    oss << month << "-";
    if (day < 10) oss << "0";
    oss << day;
    return oss.str();
}

// 处理输入日期
std::vector<std::string> processDate(const std::string& input) {
    int a, b, c;
    sscanf(input.c_str(), "%d/%d/%d", &a, &b, &c);
    std::vector<std::string> dates;
    std::vector<int> years = {1900 + a, 2000 + a};
    std::vector<int> months = {b};
    std::vector<int> days = {c};

    // 年/月/日
    for (int year : years) {
        if (isValidDate(year, b, c)) {
            dates.push_back(generateDateStr(year, b, c));
        }
    }

    // 月/日/年
    for (int year : {1900 + c, 2000 + c}) {
        if (isValidDate(year, a, b)) {
            dates.push_back(generateDateStr(year, a, b));
        }
    }

    // 日/月/年
    for (int year : {1900 + c, 2000 + c}) {
        if (isValidDate(year, b, a)) {
            dates.push_back(generateDateStr(year, b, a));
        }
    }

    // 去重并排序
    std::sort(dates.begin(), dates.end());
    dates.erase(std::unique(dates.begin(), dates.end()), dates.end());
    return dates;
}

int main() {
    std::string input;
    std::cin >> input;
    std::vector<std::string> dates = processDate(input);
    for (const auto& date : dates) {
        std::cout << date << std::endl;
    }
    return 0;
}    
蓝桥杯AcWing学习笔记 4-2模拟的学习(附相关蓝桥真题:错误票据、移动距离、日期问题、航班时间 可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。此时我们可以不用枚举时刻,将所有订单按时间顺序排序,每次处理一批相同的订单,只要订单的时间点和店铺id相同,我们就把它看成一个。AcWingMLE,10个数据过了7个,蓝桥杯满分100分拿到了90分,最后一个数据内存超限,但也是很可观的分数了。这样做的好处是我们在去做每一个时刻的时候,只需要考虑有订单的店即可,没有订单的店就可以不用考虑了。,我们求的是飞机一趟的飞行时间,因为飞机来回的飞行时间相同,我们可以将来回的飞行时间相加:得到。 阅读详情

相关推荐

解析蓝桥杯思维之真题训练:日期问题

目录🍋题目描述🍋主要思路🍋源代码🍋其他真题 🍋题目描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。 比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。 给出一个文献上的日期,你能帮助小明判断

m0_51456787的博客 320

【蓝桥杯速成】日期问题(填空题) + 真题讲解 python

众所周知,蓝桥杯有两道填空题,还特别喜欢考日期问题什么?你还在使用计算器手算?接下来我来告诉你正确的做法。

查理零世的博客 998

Jetson Orin NX上CAN总线调试全攻略:从硬件焊接到开机自启动(附常见问题解决方案)

本文详细介绍了在NVIDIA Jetson Orin NX开发板上进行CAN总线调试的全过程,包括硬件焊接、驱动配置、通信测试和开机自启动设置。针对常见问题如信号接反、波特率设置等提供了实用解决方案,帮助开发者快速实现稳定的CAN总线通信。

c2d3e4f的博客 1076

蓝桥杯真题 日期问题

我们把所有符合条件的字符串放到result数组中,需要先用sort函数按字典序排列,但这时候可能有重复的字符串,所以用set(升序无重复)容器去重,最后输出。思路:这道题需要注意的细节比较多,一个是判断是不是闰年,一个是月和日的数字不能为0,

m0_74125600的博客 220

百度新闻评论内容抓取

通过抓包分析发现,百家号手机app端文章评论内容接口为:https://ext.baidu.com/api/comment/v1/comment/getlist?appid=101&sid=1008524_2-1010050_1-1007549_23033-1007550_23035&cuid=01B5EAF73E8A83BB842BE04E4FB6C656|23200201047...

codingforhaifeng的博客 2422

CCD成像原理以及机器视觉中的相机选型

CCD成像原理以及机器视觉中的相机选型 近年来,随着人工智能的高速发展和图像处理技术的日益成熟,机器视觉在自动化领域发挥着越来越大的作用。机器视觉被用于代替人工视觉,使机器人能够完成以往只有人工才能完成的任务,这大大减少了在危险环境下工作的风险。同时,在来料无序或工作环境杂乱的情况下,机器视觉可以显著提高生产效率和自动化柔性程度。随着人们对工业设计水平和生产效率需求的日益提高,机器视觉正在逐步代替传统复杂繁琐的自动化模式,成为当今的主要发展趋势。 机器视觉是一项综合的技术,包括数字图像处理,传感器,光学

cszn6666的博客 5572

第八届蓝桥杯大赛个人赛省赛(软件类)真题 标题:日期问题

package com.wzxy.test; import java.util.Scanner; /* * 标题:日期问题 */ public class Main{ static int year,month,day,Mon; static Scanner sc = new Scanner(System.in); static String str = sc.next(); ...

星辰大数据的博客 817

linux操作系统使用以太网连接ubuntu,设置固定ipv4

首先,您需要确定要配置的网络接口。可以使用ifconfig -a或ip addr命令来列出当前系统上的所有网络接口及其相关信息。找到您要配置的网络接口名称,例如eth0、ens33或enp0s3;保存并关闭文件后,您需要重启网络服务以使更改生效。在linux操作系统中,要使用交换机连接以太网可以直接使用交互界面;如果你的操作系统没有交互界面,你可以使用命令方式配置;点击ipv4,方式为手动,可以设置ip和子网了;开头,后接网络接口名称。第三步:点击有线最右边圆形控件;第二步:点击有线设置;

2301_79311842的博客 2404

蓝桥杯国赛真题解析:完全日期问题的算法实现与优化

日期处理是算法竞赛和软件开发中的基础且高频的考点,涉及时间计算、边界条件判断等核心编程能力。其原理通常围绕闰年规则、月份天数、日期递进等逻辑展开,要求开发者具备严谨的思维和扎实的编码基本功。掌握高效的日期处理方法,不仅能提升代码的健壮性,还能为解决更复杂的时序问题奠定基础。在算法竞赛如蓝桥杯中,这类问题常以“数位和”、“完全平方数”等概念结合出现,考察选手对基础算法的综合应用能力。本文以“完全日期”问题为例,深入剖析日期遍历、数位求和与完全平方数判断的实现细节,并探讨在暴力枚举与优化剪枝之间的平衡艺术,帮助

weixin_33978044的博客 298

真题库系列之 CCF GESP 2025年12月认证 Python 1级真题含正确答案与解析

学生通过计算机基础知识的学习,了解计算机的构成与操作,以及计算机的发 展历程。通过编程基础知识以及语句的掌握,可以独立完成简单功能的顺序结构、 分支结构、循环结构的程序。

iCloudEnd的博客 319

【软考高项论文】论信息系统项目管理的干系人绩效域

例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。

Programming Talk 1683

蓝桥杯真题解析:完全日期问题的编程思维与Python实现

日期处理是编程中的常见基础问题,涉及时间逻辑、数据格式转换和算法效率。其核心原理是通过迭代或计算来操作和验证日期数据,在各类应用如数据分析、系统开发和算法竞赛中至关重要。本文以蓝桥杯真题“完全日期”为例,深入探讨日期遍历、数位求和及完全平方数判定等关键技术细节。通过分析日期库的高效使用、数位求和的多种实现方法以及预计算优化技巧,展示了如何将基础概念应用于解决具体问题。文中融入了对datetime库的实践和算法优化的思考,旨在帮助读者掌握日期类问题的通用解法框架,提升编程思维与代码健壮性。

weixin_33859231的博客 326

Smart PLC高速脉冲输入计米轮模块(编码器测速/计米详细讲解)

线缆行业单绞机PLC控制算法详细解读可以参看下面的文章链接:线缆行业单绞机控制算法(详细图解+代码)_RXXW_Dor的博客-优快云博客在了解单绞机之前需要大家对收放卷以及排线控制有一定的了解,不清楚的可以参看下面几篇博客,这里不再赘述,受水平和能力所限,文中难免出现错误和不足之处,诚恳的欢迎大家批评和指正。PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-优快云博客_plc闭环控制实例。SMART PLC时间间隔定时器应用(高速脉冲测频/测速)_RXXW_Dor的博客-优快云博客。

RXXW_Dor的博客 2820

蓝桥杯真题 日期问题 python

蓝桥杯真题-日期问题python解答过程,附代码及解析小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。给出一个文献上的日期,你能帮助小明判

冷烬亿下 575

YOLOv9原创自研:卷积魔改 | 一种新颖的风车形卷积(PConv)融合注意力机制,加强微弱小目标检测能力

为了进一步提升小目标检测能力,风车形卷积(PConv)融合注意力机制进一步提升小目标检测能力

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 363

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝桥杯JAVA版答案——历年真题——日期问题

本题考查 本题可以使用JAVA的date类进行求解(法一),也可以编写判断逻辑进行判断(法二) 思路 法一:调用java的date类尝试将字符串转换为日期,若转化不成功则有catch语句获取错误,若成功加入列表。最后列表排序,再用一个日期格式化器将日期格式化为“yyyy-MM-dd”格式。注意:format.setLenient(false)一定要有,否则格式化器将对日期格式进行宽松处理,会出现错...

R.I.P Kobe Bryant 683

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

蓝桥杯真题——日期问题(结构体排序/sort排序+输入输出格式)、四平方和(枚举+平方数)

枚举

2301_80037953的博客 942

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

蓝桥杯真题———日期问题

根据每年每月每日进行枚举,如果符合要求就输出对应的格式。

2302_80145725的博客 644

【蓝桥杯冲刺省一,省一看这些就够了-C++版本】蓝桥杯日期时间问题模板及相关练习题

​ 如果只是为了应付这道题目计算器或者手算一下都可以,但如果把题目扩展为任意的两个日期之间间隔多少天我们又该如何去做呢。​ 2.转化成秒之后,先需要对一天有多少秒进行取余,这样剩下的时间肯定不到一天才能进行时间计算,也就是。​ 其实思路也很简单从开始日期一直加1,直到与最终日期相等为止,在上一题的代码基础上略作修改即可。​ 我们此时计算的不是天数,但我们知道一天有多少分钟,所以累加的时候换成。(3)2月要分平年闰年,闰年满30天进1月,平年满29天进1月。直接模拟日期的计算与进位,我们假设年份用。

Dashcoding213的博客 1171

【蓝桥杯真题-日期问题】

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

Westbrook023的博客 576

日期问题——蓝桥杯真题Python||动态规划

本题的关键在于正确处理多格式的日期组合和严格的合法性验证。生成候选日期组合:覆盖所有可能的格式。年份补全与范围检查:确保年份在题目要求的范围内。日期合法性验证:包括月份、日期和闰年判断。去重与排序:保证输出结果的唯一性和有序性。

阿常的博客 906

蓝桥杯第八届真题:日期问题

点击查看:蓝桥杯历年真题 题解目录 08.日期问题 1.获取 year、moth、day三个数据 2.写一个读入数据,并判断日期是否合理的方法 3.注意判断是否为闰年 4.调用方法时,传入三种不同顺序的参数 5.生成字符串时,注意小于10的月份和天数前加上0 6.用TreeSet存储字符串,以达到去重和按字典序排序的效果 import java.util.*; public class Mai...

Xiong-er 的博客 472

C/C++ 日期问题(以蓝桥杯历年真题为例)

具体思路:在原有模板的基础上,将起始遍历年份修改为2014,即从2014年1月1日开始遍历,定义flag来标记天数,当year=2014,month=11,day=9同时满足时,将flag记为1,从2014年11月9日之后,flag就一直等于1了,每次遍历都会++,cnt=1001是因为题目中1月1日过15天之后是1月16日,是走了15个间隔,没有算1月1日当天,由于该段代码是从2014年11月9日当天开始flag就等于1了,因此要当cnt=1001时,再输出那一天的日期。比如:2015-02-19。

oowy_的博客 733

蓝桥杯真题:日期问题

蓝桥杯

weixin_46266058的博客 371

蓝桥杯国赛真题解析:费用报销问题的动态规划与日期处理实战

动态规划是解决最优化问题的核心算法思想,其原理在于将复杂问题分解为重叠子问题,并通过状态转移方程高效求解。在算法竞赛和工程实践中,动态规划常与具体领域约束结合,例如处理带时间序列的决策问题。费用报销问题正是这样一个典型场景,它本质上是0-1背包模型的变种,但额外增加了日期间隔约束,要求所选发票日期之差至少为K天。这需要将日期处理转化为可计算的序列问题,通常通过日期排序和二分查找来优化状态转移。本文以蓝桥杯国赛真题为背景,深入剖析如何运用线性DP和状态DP两种思路,结合**日期转换**与**二分搜索**技巧,

weixin_30835649的博客 431
上一篇: 蓝桥杯真题—路径之谜
下一篇: LeetCode hot 100—课程表
rigidwill666
博客等级 码龄7年 508粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rigidwill666

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值