牛客-计算机复试题-Day of Week

语言是python。这题应该有一个很简单的方法,就是用库,不过我没去试,是自己推出来的。
在写这篇博客的时候是2020.3.30,星期一,则得到下表:

2020.3.30星期一
2020.3.31星期二
2020.4.1星期三
2020.4.2星期四
2020.4.3星期五
2020.4.4星期六
2020.4.5星期日

原理就是,一周只有7天,是循环的,因此我们用上面的表格去推给定的日期是周几。我们将1000.1.1定为第1天,写这篇博客时是2020.3.30,对应的就是第372637天,那么有下面的表:

2020.3.30372637
2020.3.31372638
2020.4.1372639
2020.4.2372640
2020.4.3372641
2020.4.4372642
2020.4.5372643

因此,给定一个日期,我们只要算出它是对应第几天,例如为k,那么我们从上面的表中,总能找到一个值d,使得(d-k)%7=0,那么d对应是周几,k就对应是周几。
代码如下:

def is_round_year(year):
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0

years = {str(year): 0 for year in range(1000, 3001)}
for year in range(1001, 3001):
        years[str(year)] = years[str(year - 1)] + 365 + (1 if is_round_year(year-1) else 0)
months = {'January': 0, 'February': 31, 'March': 59, 'April': 90, 'May': 120, 'June': 151, 'July': 181,
          'August': 212, 'September': 243, 'October': 273, 'November': 304, 'December': 334}
day = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Friday', 5: 'Saturday', 6: 'Sunday'}

today = years['2020'] + months['March'] + 1 + 30
print(today)
while True:
    try:
        date = input().strip().split()
        days = years[date[2]] + months[date[1]] + int(date[0])

        if is_round_year(int(date[2])):
            if date[1] != 'February' and date[1] != 'January':
                days += 1

        for i in range(7):
            delta = abs(today + i - days)
            if delta % 7 == 0:
                print(day[i])
                break
    except:
        break
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值