题解:P11002 [蓝桥杯 2024 省 Python B] 神奇闹钟

· · 题解

没有实际难度,就是转换比较恶心人。

思路

分快处理,就按照输入的两大块。

首先不论怎样都要求出两块的和,“动”指代的是是否输出运算的结果还是直接输出输入的数。所以先动后者,看减去前者对 x 取模的值后是否仍旧大于 x。如是,则可以算出后半块结果输出,若不是,则从后往前,逐个添加(因为越往前的计算越多)。例如,对于某序列按处理的优先顺序进行以下操作,小括号内为处理的数。

yyyy-MM-dd HH:mm:ss
yyyy-MM-dd (HH:mm:ss)
yyyy-MM-(dd HH:mm:ss)
yyyy-(MM-dd HH:mm:ss)
(yyyy-MM-dd HH:mm:ss)

核心代码

没有难点,放一下第一大块的计算吧,第二块相对简单很多,只需要乘起来就行了,不用考虑闰年,故略。

    f = 60#分
    s1 = 3600#时
    d1 = 84600$天
    #以m开头的是月,具体指代乘号后面的便是天数
    m1 = d1 * 28
    m2 = d1 * 29
    m3 = d1 * 30
    m4 = d1 * 31
    #年和四年
    y = 31536000
    y4 = 126230400  # 四年(考虑闰年)
    for i in range(1, d[1] + 1):
        if i == 2:
            if d[0] + 1 % 4 == 0 and (d[0] % 100 != 0 or d[0] % 400 == 0):
                cnt += m1
            else:
                cnt += m2
        elif i == 4 or i == 6 or i == 9 or i == 11:
            cnt += m3
        else:
            cnt += m4