当前位置:   article > 正文

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

第十五届蓝桥杯省赛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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

【在线测评】

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/590140
推荐阅读
相关标签
  

闽ICP备14008679号