第十五届蓝桥杯省赛PythonB组D题【神奇闹钟】题解(AC)

在这里插入图片描述
请添加图片描述
请添加图片描述

题意分析

1970 − 01 − 01 1970-01-01 19700101 00 : 00 : 00 00:00:00 00:00:00 (下文称为 S S S)起,每 x x x 分钟会响一次闹钟,给定时间 T T T,请问上一次响闹钟的时间是何时?

具体思路

  1. 算出给定时间 T T T 距离 S S S 一共过多少分钟 p p p
  2. 通过当前分钟 p p p,算出上一次响闹钟距离 S S S 的分钟为 q = p − p % x q = p - p\%x q=pp%x
  3. 计算 T T T 之后 q q q 分钟的时间点应该是多少。
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def is_leap(y):
    return y % 400 == 0 or y % 4 == 0 and y % 100 != 0

def daysOfMonth(y, m):
    if m == 2:
        return 28 + is_leap(y)
    return days[m]

def betweenDays(y, m, d):
    yy, mm, dd = 1970, 1, 1
    res = 0
    while yy != y:
        res += 365 + is_leap(yy)
        yy += 1
    while mm != m:
        res += daysOfMonth(yy, mm)
        mm += 1
    res += d - 1
    return res

def get(y, m, d, h, mi):
    res = betweenDays(y, m, d) * 24 * 60
    res += h * 60
    res += mi
    return res

def nextDay(k):
    y, m, d, h, mi, s = 1970, 1, 1, 0, 0, 0
    while k >= (365 + is_leap(y)) * 24 * 60:
        k -= (365 + is_leap(y)) * 24 * 60
        y += 1
    while k >= daysOfMonth(y, m) * 24 * 60:
        k -= daysOfMonth(y, m) * 24 * 60
        m += 1
    while k >= 24 * 60:
        k -= 24 * 60
        d += 1
    h = k // 60
    k %= 60
    mi = k
    
    print("%d-%02d-%02d %02d:%02d:%02d" % (y, m, d, h, mi, s))

T = int(input())
for _ in range(T):
    s1, s2, s3 = input().split()
    y, m, d = map(int, s1.split('-'))
    h, mi, s = map(int, s2.split(':'))
    x = int(s3)
    
    k = get(y, m, d, h, mi)
    k -= k % x
    
    nextDay(k)

【在线测评】

在这里插入图片描述

蓝桥杯是一个国内著名的计算机比赛,为了帮助参赛者更好地准备和了解比赛的型,委会会公布历年的真并提供相应的题解。 首先,我们需要了解蓝桥杯是一个综合性的计算机比赛,测试的对象包括计算机基础知识、编程能力以及解决实际问的能力。 在历年的真中,参赛者将面临不同类型的目,包括算法设计与优化问、数据结构与算法问、编程等。其中针对Python B目主要考察的是对Python语言的掌握和应用能力。 目解答一般会包含以下几个方面的内容: 1. 目分析与理解:读取目,理解目的要求和限制条件。通过仔细分析目,确定目的输入与输出,以及问的核心。 2. 设计解决方案:根据目要求和限制条件,设计一个合适的解决方案。可以使用合适的算法和数据结构来解决问,并做出相应的性能优化。 3. 编写代码实现:根据设计的方案编写相应的代码实现。需要注意的是,Python语言有其独特的语法和特性,掌握好这些特性可以更好地完成编程任务。 4. 调试与测试:编写完代码后,需要进行调试和测试。通过运行样例输入和输出,检查代码是否符合目要求,并且没有逻辑上的错误。 5. 总结与优化:在完成目解答后,可以进行总结和优化。包括分析算法复杂度、代码风格和可读性等方面,以便在比赛中更好地表现。 在准备蓝桥杯时,可以通过阅读历年的真题解来了解比赛的难度和类型,针对性地进行练习和提高。同时也可以参加相关的培训班和讨论活动,与其他参赛者交流经验和技巧。 总而言之,历年蓝桥杯的解答对于提高自己的编程能力和应对比赛非常有帮助。通过认真分析和实践,可以更好地理解并掌握Python编程,并在比赛中取得更好的成绩。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值