Loading

牛客13584 日历中的数字

链接:https://ac.nowcoder.com/acm/problem/13584
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

ElemenT马上就要毕业了,他打开日历看了看时间。发现日历上的日期都是2017-04-04这样的格式的,月和日如果不足2位数,前面都会补充0。
给定一个年份和月份,ElemenT把那个月的日期都按上述格式写到纸上,他现在想知道某种数字出现了多少次。

输入描述:

多组输入
每组输入一行,有3个数字y,m,x(1000<=y<=3000,1<=m<=12,0<=x<=9),分别代表年份,月份,和他想知道哪个数字出现的次数。

输出描述:

每组输出一个整数,表示数字x在这个月的日期里出现了多少次。

在这里插入图片描述
注意闰年和月和日如果不足2位数,前面都会补充0即可。

def fn(y):
    if (y%4 ==0 and y%100 !=0) or y%400 == 0:
        return True
    else:
        return False
c1 = [1, 3, 5, 7, 8, 10, 12]
c2 = [4, 6, 9, 11]
c3 = [2]

while True:
    try:
        res = 0
        y, m, x = list(map(int, input().split()))
        if m in c1:
            d = [12, 14, 13, 5, 3, 3, 3, 3, 3, 3]
            n = 31
        elif m in c2:
            d = [12, 13, 13, 4, 3, 3, 3, 3, 3, 3]
            n = 30
        elif m in c3 and fn(y):
            d = [11, 13, 13, 3, 3, 3, 3, 3, 3, 3]
            n = 29
        else:
            d = [11, 13, 12, 3, 3, 3, 3, 3, 3, 2]
            n = 28
        if m <= 9:
            d[0] += n
            d[m] += n
        elif m == 10:
            d[1] += n
            d[0] += n
        elif m == 11:
            d[1] += 2*n
        else:
            d[1] += n
            d[2] += n
        res += d[x]
        if str(x) in str(y):
            res += (str(y).count(str(x)))*n
        print(res)
            
    except:
        break

posted @ 2021-01-26 17:40  XiaoJ_c  阅读(36)  评论(0编辑  收藏  举报