040:万年历(python)

040:万年历

描述

给定年月日,求星期几。已知2020年11月18日是星期三。另外,本题有公元0年,这个和真实的纪年不一样

输入

第一行是n(n <=30),表示有n组数据
接下来n行,每行是一组数据。
每行三个整数y,m,d,分别代表年,月,日。(-1000000<=y<=1000000)

若今年是2017年,则往前就是2016年,2015年....一直数到2年,1年,再往前就是0年,-1年,-2年.....

输出

对每组数据,输出星期几,星期几分别用

"Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday" 表示

如果月份和日期不合法,输出"Illegal"

样例输入

6
2017 2 29
2017 13 2
0 1 1
-2 3 4
2017 10 18
2015 12 31

样例输出

Illegal
Illegal
Saturday
Wednesday
Wednesday
Thursday

来源

Guo Wei

#觉得写起来麻烦,就一直没写,今天休息,弄一下万年历
#有判断输入合法的地方,想了下,就是判断月小于1大于13,和日的问题
#边写边判断,先判断日小于1和大于28,30,31的问题,先用个r表示闰年,0是不闰,1是闰年
#是从程序的第5行开始写的,上面4行是后加的
#弄好Illegal之后,其它判断在else中
#日子数是年*365防数过大%7了,再加上每4闰年减100不闰,多减了,再加400再闰年
#起始想法是公元0年1月1日为星期几(不知道,但要找个从那开始的星期日),但我的days是从那时的周天开始算的
#题目给的日子不好用,还得减==,就用从0年开始的周日,最后倒推减几
#倒数第三行,减几就是调的数,用题目中给的年月日,输入后看是周几,再调的
week=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
monday=[0,31,28,31,30,31,30,31,31,30,31,30,31]
n=int(input())
for m in range(n):
    s=input().split()
    year=int(s[0])
    mon=int(s[1])
    day=int(s[2])
    days=0
    r=int(year%4==0 and year%100!=0 or year%400==0)
    if mon==2 and (day<1 or day>28+r) or (mon in [1,3,5,7,8,10,12]) and (day<1 or day>31)\
       or (mon in [4,6,9,11]) and (day<1 or day>30) or mon>12 or mon<1:
        print("Illegal")
    else:
        days=year*365%7+(year//4+year//400-year//100)%7
        for i in range(1,mon):
            days+=monday[i]
        if mon<3:#因为0年就是闰年了,如果输入年是闰年,上面days的值如没到3月,就多加了一天
            days-=r#是闰年,就是1,不是闰年就是0,和平年没关系
        days+=day-1
        t=days%7
        print(week[t])


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值