039:万年历
总时间限制:
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
def Rl(y,m,d):
days = 0
dates = 0
years = 0
days_old = 15
I ='Illegal'
month1 = [31,28,31,30,31,30,31,31,30,31,30,31]
month2 = [31,29,31,30,31,30,31,31,30,31,30,31]
weekdays = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"]
for i in range(10):
days_old += month2[i]
if (y%4 == 0 and y%100!=0) or y%400 == 0:
if m in [1,3,5,7,8,10,12]:
if d > 31 or d <1 :
print(I)
return
elif m == 2:
if d < 1 or d > 29:
print(I)
return
elif m in [4,6,9,11]:
if d<1 or d >30:
print(I)
return
else:
print(I)
return
else:
if m in [1,3,5,7,8,10,12]:
if d > 31 or d <1 :
print(I)
return
elif m == 2:
if d < 1 or d > 28:
print(I)
return
elif m in [4,6,9,11]:
if d<1 or d >30:
print(I)
return
else:
print(I)
return
#输入年份大于2020年11月
if y> 2020 or (y == 2020 and m == 11 and d >= 15):
for i in range(2020,y):
if (i %4==0 and i%100!= 0) or i%400 ==0:
years += 366
else:
years +=365
if (y%4 == 0 and y%100 != 0) or y%400 == 0:
for i in range(m-1):
days += month2[i]
else:
for i in range(m-1):
days += month1[i]
dates = years + days + d - days_old
print(weekdays[dates%7])
#2020年11月之前
elif (y == 2020 and m < 11) or ( y == 2020 and m == 11 and d<15):
for i in range(m-1):
days += month2[i]
dates = days_old - days -d
print(weekdays[(7-dates%7)%7])
#输入时间早于2020年
else:
for i in range(y+1,2020):
if (i %4 == 0 and i%100 != 0) or i%400 == 0:
years += 366
else:
years += 365
if (y%4 ==0 and y%100 != 0) or y%400 ==0:
for i in range(m-1,12):
days += month2[i]
else:
for i in range(m-1,12):
days += month1[i]
dates = years + days - d + days_old
print(weekdays[(7-dates%7)%7])
a = int(input())
c =[]
for i in range(a):
b = input().split()
c.append(b)
for i in range(len(c)):
a1 ,a2 , a3 = int(c[i][0]) ,int(c[i][1]) ,int(c[i][2])
Rl(a1,a2,a3)
编程挑战:万年历日期转星期,

该编程问题要求编写一个函数,根据给定的年月日计算对应的星期。程序需处理公元前和公元后的日期,考虑闰年的规则,并检查输入的日期是否合法。非法日期应返回Illegal。示例输入和输出展示了不同合法和非法情况的处理。
692

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



