|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jcpython2 于 2022-12-29 13:23 编辑
给定年月日,求星期几。已知2020年11月18日是星期三。
输入
第一行是n(n <=30),表示有n组数据
接下来n行,每行是一组数据。
每行三个整数y,m,d,分别代表年,月,日。(-1000000<=y<=1000000)
week = ["Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday"]
monthDays = [-1,31,28,31,30,31,30,31,31,30,31,30,31]
#初始化12个月每个月各多少天,从下标1开始,下标0无意义
days = 0
#从2020-11-18 周3开始经过多少天
lst = input().split()
year,month,date = int(lst[0]) , int(lst[1]) , int(lst[2])
#输入分配年月日
#计算相差多少整年,分别累加相差的年数 月数 日数计算出相差的days数,再%7得出星期几
for y in range(2012,year): #累加年数
if y%4 ==0 and y%100!=0 or y%400==0: #闰年判断
days += 366
else:
days += 365
if year%4 ==0 and year%100!=0 or year%400==0: #闰年判断
monthDays[2] = 29
for i in range(1,month): #累加月数.input输入那年过掉的月数总天数,如果是1月则(1,1)不循环不计算
days += monthDays[i]
days += date #累加天数
#由于一开始是整年累加,要减去2022-11-15一共多少天
sourDay = 15
sourYear =2022
sourMonth = 11
#判定2022是否闰年
if sourYear%4 ==0 and sourYear%100!=0 or sourYear%400==0: #闰年判断
sourDay += 1
for i in range(1,sourMonth+1): #累加月数.input输入那年过掉的月数总天数,如果是1月则(1,1)不循环不计算
sourDay += monthDays[i]
days -= sourDay #由于一开始按整年计算日期,所有要扣除题目一开始给的11个月15天
print(week[days%7],days%7)
是不是 days -= sourDay #由于一开始按整年计算日期,所有要扣除题目一开始给的11个月15天
这一步思路错了? 该怎么纠正??
是公式出了问题,2020年前,是算当年剩余的天数,当年全年天数已经计算;同时,对2020,10,18前的天数是相加,所以计算公式:
for y in range(year,2020): #累加年数
days += 365+int(rn(y))
days -= mtodays(month) #当年天数
days = days2020+days #距离2020-11-18 周3还需要经过多少天 #coding=utf-8
week = ["Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday"]
#初始化12个月每个月各多少天,从下标1开始,下标0无意义
monthDays = [-1,31,28,31,30,31,30,31,31,30,31,30,31]
sourYear =2020
sourMonth = 11
sourDay = 18
sourweek=3
days=0
days2020=0
#判定是否闰年
def rn(year):
if year%4 ==0 and year%100!=0 or year%400==0: #闰年判断
return 1
else:
return 0
#当年的天数
def mtodays(monthd):
j=0
for i in range(1,monthd): #累加月数.input输入那年过掉的月数总天数,如果是1月则(1,1)不循环不计算
j += monthDays[i]
if monthd > 2:
j+= rn(year)
j += date
return j
#2020-1-1日到11-18 周3经过多少天
for i in range(1,sourMonth):
days2020 += monthDays[i]
days2020 += rn(sourYear) + sourDay
#print(days2020) #323
#输入分配年月日
lst = input().split()
year,month,date = int(lst[0]) , int(lst[1]) , int(lst[2])
if year == 2020:
days = mtodays(month)- days2020
elif year > 2020:
for y in range(2020,year): #累加年数
days += 365+rn(y)
days += mtodays(month) #当年天数
days = days-days2020 #距离2020-11-18 周3经过多少天
else :
for y in range(year,2020): #累加年数
days += 365+int(rn(y))
days -= mtodays(month) #当年天数
days = days2020+days #距离2020-11-18 周3还需要经过多少天
wk=days%7 #先算7天的余数
wk=wk+sourweek #把周3加入再算
print(days,"days")
print(week[wk%7],wk%7)
|
|