总时间限制: 1000ms 内存限制: 65536kB
描述
给定年月日,求星期几。已知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
我的思考:
郭炜老师给了思路,修改他讲解的例题代码。原本想用数学的方法后面想想还是算了……枚举好理解点,特别在往后逆推天数。
求年份小于2012的星期几,在好好听了老师讲的思路后,用逆向的思维去求解即可,比如求 0 1 1,那我们就求从0 年 到 2012 年有多少天,然后 用days%7便得到了 还剩下下的余数,同样是用逆向思维,比如余1,那就是周六,也就是7-days%7,但这还不够,因为这个公式在days%7==0的情况下,得到的是7,可我们的xq列表里Sunday排0,所以继续取余,就变成了 (7-days%7)%7,这样就可以得到正确的下标。
其实一开始我觉得难的地方是0年怎么算,看了提示后,我意识到例题里的判断是否闰年的方法应该是可以继续沿用的,然后重点在year<2012时逆推天数。
代码如下:
第一次没成功,修改了下,第二次就ac了。这道题算是个奇葩,代码长度和前面比起来突然增加……
xq=["Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday"]
n=int(input())
for n1 in range(n):
monthDays =

最低0.47元/天 解锁文章
1358

被折叠的 条评论
为什么被折叠?



