当前位置: 首页 > news >正文

蓝桥杯之日期问题2

文章目录

    • 需求1
      • 1.1 代码
    • 2.需求2
      • 2.1代码

需求1

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

输入描述
输入包含一个八位整数
N
N,表示日期。

对于所有评测用例,
10000101

N

89991231
10000101≤N≤89991231,保证
N
N 是一个合法日期的 8 位数表示。

输出描述
输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

输入输出样例
示例
输入

20200202
copy
输出

20211202
21211212
copy
运行限制
最大运行时间:1s
最大运行内存: 256M

1.1 代码

from datetime import datetime, timedelta

# 判断一个日期字符串是否为回文
def is_palindrome(date_str):
    return date_str == date_str[::-1]

# 判断一个日期字符串是否为 ABABBABA 型回文
def is_ababbaba(date_str):
    return date_str[:2] == date_str[2:4] and is_palindrome(date_str)

# 获取输入的日期
input_date_str = input()
input_date = datetime.strptime(input_date_str, '%Y%m%d')

# 从输入日期的下一天开始查找
current_date = input_date + timedelta(days=1)

# 初始化结果
next_palindrome_date = None
next_ababbaba_date = None

while True:
  # 注意我们只需要前8位日期
    current_date_str = current_date.strftime('%Y%m%d')
    # 检查是否为回文日期
    if next_palindrome_date is None and is_palindrome(current_date_str):
        next_palindrome_date = current_date_str
    # 检查是否为 ABABBABA 型回文日期
    if next_ababbaba_date is None and is_ababbaba(current_date_str):
        next_ababbaba_date = current_date_str
    # 如果两个结果都找到了,停止循环
    if next_palindrome_date and next_ababbaba_date:
        break
    # 日期加一天
    current_date += timedelta(days=1)

# 输出结果
print(next_palindrome_date)
print(next_ababbaba_date)

2.需求2

小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。

没想到,日记很快就被老师发现了问题,原来小蓝记完 8 月 31 日的日记,竟又记了 8 月 32 日和 8 月 33 日的日记。这显然是有问题的,因为根本没有 8 月 32 日和 8 月 33 日。

给定一个月份和一个日期,请问 2021 年有没有这一天。

输入描述
输入的第一行包含一个整数
m
m,表示月份。

第二行包含一个整数
d
d,表示日期。

其中,
1

m

20

1

d

40
1≤m≤20,1≤d≤40。

输出描述
如果2021年有
m
m 月
d
d 日,输入 yes,否则输出 no。

输入输出样例
示例 1
输入

8
32
copy
输出

no
copy
示例 2
输入

2
28
copy
输出

yes
copy
运行限制
最大运行时间:1s
最大运行内存: 128M

2.1代码

# @File: 17.合法日期.py
# @Author: chen_song
# @Time: 2025-02-26 17:12
from datetime import datetime

# 获取用户输入的月份和日期
month = int(input())
day = int(input())

# 定义函数判断日期是否合法
def whetherLegalDate(month, day):
    try:
        # 尝试创建一个日期对象,年份可以使用一个合理的范围,这里用 2024 作为示例
        # 因为 2024 是闰年,可以覆盖闰年 2 月 29 日的情况
        datetime(2021, month, day)
        return True
    except ValueError:
        # 若创建日期对象时抛出 ValueError 异常,说明日期不合法
        return False

# 调用函数进行判断并输出结果
if whetherLegalDate(month, day):
    print("yes")
else:
    print("no")

相关文章:

  • 前端如何进行性能优化
  • Hbase分布式——储存机制
  • 人工智能中的特征是什么?
  • MySQL常用命令大全(可复制使用)
  • 深入理解 JavaScript 中的 this 指向
  • android计算屏幕尺寸dpi
  • Java设计模式-基于MVC的WEB设计模式
  • 【Springboot知识】Logback从1.2.x升级到1.3.x需要注意哪些点?
  • 谈谈 ES 6.8 到 7.10 的功能变迁(5)- 任务和集群管理
  • MotionLayout(二):MotionLayout是什么?MotionLayout调试技巧、KeyFrame关键帧等等
  • Desktop Builder 操作概述
  • 前端工程化---ES6
  • LeetCode刷题---栈---946
  • XXE漏洞:原理、危害与修复方法详解
  • AIP-153 导入和导出
  • Linux C++项目推荐:文件服务器+如何快速上手C++大项目
  • element组件教学,基础
  • Vue2+Element实现Excel文件上传下载预览
  • RAG(检索增强生成)原理、实现与评测方法探讨
  • 流匹配(Flow Matching)教程
  • 巴西总统卢拉将访华
  • 秦洪看盘|交易型资金收缩,释放短线压力
  • 马上评丨维护学术诚信别陷入“唯AI检测”误区
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役
  • 公示!17个新职业、42个新工种亮相
  • 上海将发布新一版不予行政处罚清单、首份减轻行政处罚清单