|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
复制代码
|
|