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

蓝桥杯比赛 python程序设计——神奇闹钟

问题描述

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

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

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

输入格式

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

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

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

输出格式

输出 TT 行,每行包含一个时间(格式为 уууу-MM-ddHH:mm:ssуууу-MM-ddHH: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≤10001≤T≤10,1≤x≤1000,保证所有的时间格式都是合法的。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java3s512M
Python310s512M
PyPy33s512M
Go5s512M
JavaScript5s512M

 完整代码:

import os
import sys
import datetime as tm
# 请在此输入您的代码
T=int(input())
start_time = tm.datetime(1970,1,1,0,0)
for i in range(T):
  demo=list(map(str,input().split()))
  last_time=tm.datetime.strptime(demo[0]+" "+demo[1],"%Y-%m-%d %H:%M:%S")
  time_cha=last_time - start_time
  x=int(demo[2])
  x2=tm.timedelta(minutes=x)
  n= time_cha // x2
  results = (start_time+n*x2).strftime("%Y-%m-%d %H:%M:%S")
  print(results)

代码解析:

1. 导入模块

python

import os
import sys
import datetime as tm

  • 功能:导入了ossysdatetime模块,不过ossys模块在代码中并未被使用,属于多余导入,可以考虑移除。datetime模块被重命名为tm,后续会用于处理日期和时间相关的操作。

2. 读取测试用例数量

python

T = int(input())

  • 功能:从标准输入读取一个整数,将其赋值给变量TT代表后续要处理的测试用例的数量。

3. 定义起始时间

python

start_time = tm.datetime(1970, 1, 1, 0, 0)

  • 功能:使用datetime模块创建一个datetime对象start_time,其值为 1970 年 1 月 1 日 0 时 0 分,作为后续时间计算的起始点。

4. 循环处理每个测试用例

python

for i in range(T):
    demo = list(map(str, input().split()))
    last_time = tm.datetime.strptime(demo[0] + " " + demo[1], "%Y-%m-%d %H:%M:%S")
    time_cha = last_time - start_time
    x = int(demo[2])
    x2 = tm.timedelta(minutes=x)
    n = time_cha // x2
    results = (start_time + n * x2).strftime("%Y-%m-%d %H:%M:%S")
    print(results)

  • 循环结构for i in range(T)会循环T次,每次处理一个测试用例。
  • 读取输入
    • demo = list(map(str, input().split())):从标准输入读取一行内容,按空格分割成多个字符串,并将这些字符串存储在列表demo中。
  • 解析结束时间
    • last_time = tm.datetime.strptime(demo[0] + " " + demo[1], "%Y-%m-%d %H:%M:%S"):将demo列表中的前两个元素(日期和时间)拼接成一个字符串,然后使用strptime方法将其解析为datetime对象last_time
  • 计算时间差
    • time_cha = last_time - start_time:计算last_timestart_time之间的时间差,结果是一个timedelta对象。
  • 获取时间间隔
    • x = int(demo[2]):将demo列表中的第三个元素转换为整数,赋值给xx代表时间间隔的分钟数。
    • x2 = tm.timedelta(minutes=x):使用timedelta对象表示x分钟的时间间隔。
  • 计算倍数
    • n = time_cha // x2:计算时间差time_cha是时间间隔x2的多少倍,结果是一个整数。
  • 计算结果时间并格式化输出
    • results = (start_time + n * x2).strftime("%Y-%m-%d %H:%M:%S"):将起始时间start_time加上n倍的时间间隔x2,得到结果时间,然后使用strftime方法将结果时间格式化为YYYY-MM-DD HH:MM:SS的字符串。
    • print(results):打印格式化后的结果时间。

 

相关文章:

  • 图像颜色空间对比(Opencv)
  • 【Nginx】Nginx代理Tomcat配置及404问题解决
  • JavaScript逆向工程:如何判断对称加密与非对称加密
  • LLM应用开发(七)--记忆
  • 聊一聊接口测试时遇到第三方服务时怎么办
  • map映射到二维数组
  • Windows下安装depot_tools
  • 云曦月末断网考核复现
  • 力扣HOT100之链表: 148. 排序链表
  • queue容器
  • 3.软考高项(信息系统项目管理师)-范围管理
  • Openssl升级至openssl9.8p1含全部踩坑内容
  • Socket多路复用网络编程应用总结
  • RDD行动算子和累加器
  • 低代码控件开发平台:飞帆中粘贴富文本的控件
  • C++学习中常见的数组越界问题及解决方案
  • fit 转 gpx
  • w286入校申报审批系统设计与实现
  • 单片机方案开发 代写程序/烧录芯片 九齐/应广等 电动玩具 小家电 语音开发
  • Gemini Deep Research惊艳升级:2.5 Pro模型带来的研究效率革命
  • 网站备案登记查询/市场调研的内容
  • 网站模板内容怎么添加图片/seo分析案例
  • 网站开发实训目的/搜索seo神器
  • wordpress网站支持中文注册/合肥网络推广网络运营
  • 贵阳网站设计模板/电商网站销售数据分析
  • 辽宁省兴城做网站的/宁德seo培训