蓝桥杯2024年第十五届省赛真题-神奇闹钟

题目描述

小蓝发现了一个神奇的闹钟,从纪元时间(1970 年 1 月 1 日 00:00:00 )开始,每经过 x 分钟,这个闹钟便会触发一次闹铃(纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。

对于给出的任意一个格式为 yyyy-MM-dd HH:mm:ss 的时间,小蓝想要知道在这个时间点之前(包含这个时间点)的最近的一次闹铃时间是哪个时间?

注意,你不必考虑时区问题。

输入格式

输入的第一行包含一个整数 T,表示每次输入包含 T 组数据。

接下来依次描述 T 组数据。

每组数据一行,包含一个时间(格式为 yyyy-MM-dd HH:mm:ss )和一个整数 x ,其中 x 表示闹铃时间间隔(单位为分钟)。

输出格式

输出 T 行,每行包含一个时间(格式为 yyyy-MM-dd HH:mm:ss ),依次表示每组数据的答案。

样例输入

2
2016-09-07 18:24:33 10
2037-01-05 01:40:43 30

样例输出

2016-09-07 18:20:00
2037-01-05 01:30:00

提示

【评测用例规模与约定】

对于所有评测用例,1 ≤ T ≤ 10,1 ≤ x ≤ 1000,保证所有的时间格式都是合法的。

代码

from datetime import datetime, timedelta
def find_closest_ring_time(given_time_str, interval_minutes):
    # 将时间字符串转换为 datetime 对象
    given_time = datetime.strptime(given_time_str, '%Y-%m-%d %H:%M:%S')

    # 将间隔分钟转换为时间间隔
    interval = timedelta(minutes=interval_minutes)

    # 从纪元时间开始,计算最接近但不晚于给定时间的闹铃时间
    start_time = datetime(1970, 1, 1, 0, 0, 0)
    closest_ring_time = start_time

    # 循环直到找到最接近但不晚于给定时间的闹铃时间
    while closest_ring_time < given_time:
        closest_ring_time += interval

# 如果计算出的闹铃时间晚于给定时间,需要减去一个间隔
    if closest_ring_time > given_time:
        closest_ring_time -= interval

    return closest_ring_time.strftime('%Y-%m-%d %H:%M:%S')


# 读取输入数据组数 T
T = int(input())

# 循环读取 T 组数据
results = []
for _ in range(T):
    # 输入时间字符串和间隔分钟数
    input_data = input().strip()

    time_str, interval_str = input_data.rsplit(maxsplit=1) # 用空格分割字符串,取最后一个元素作为间隔分钟数

    try:
        # 将间隔分钟数转换为整数
        interval_minutes = int(interval_str)
        # 计算并存储结果
        results.append(find_closest_ring_time(time_str, interval_minutes))
    except ValueError:
        print("间隔分钟数必须为整数。")

# 输出所有结果
for result in results:
    print(result)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值