一、第一题:日期差值
解题思路:模拟
写一个计算时间的板子两者相减
【Python程序代码】
mon = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def pd(x):if x%400==0 or (x%4==0 and x%100!=0):return Truereturn False
def get_day(y,m,d):res = 0for i in range(1,y):if pd(i):res+=366else:res+=365if pd(y):mon[2]=29else:mon[2]=28for i in range(1,m):res += mon[i]return res+d
while True:try:a = input()b = input()if int(a)>int(b):a,b=b,aprint(get_day(int(b[:4]), int(b[4:6]), int(b[6:]))-get_day(int(a[:4]), int(a[4:6]), int(a[6:]))+1)except:break
二、第二题:日期问题
解题思路:枚举
把可能的日期枚举出来再判断去重排序
【Python程序代码】
s = list(input().split('/'))
mon = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def pd(y):if y%400==0 or (y%4==0 and y%100!=0):return Truereturn False
ans = []
ans.append(('20'+s[0],s[1],s[2]))
ans.append(('19'+s[0],s[1],s[2]))
ans.append(('20'+s[2],s[0],s[1]))
ans.append(('19'+s[2],s[0],s[1]))
ans.append(('20'+s[2],s[1],s[0]))
ans.append(('19'+s[2],s[1],s[0]))
res = []
for y,m,d in ans:if pd(int(y)):mon[2]=29else:mon[2]=28if 1960<=int(y)<=2059 and 1<=int(m)<=12 and 1<=int(d)<=mon[int(m)]:res.append((int(y+m+d),y,m,d))
res = list(set(res))
res.sort()
for a,y,m,d in res:print(y+'-'+m+'-'+d)
三、第三题:回文日期
解题思路:枚举
按年份枚举
【Python程序代码】
mon = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def pd(y):if y%400==0 or (y%4==0 and y%100!=0):return Truereturn False
def pd2(x):if pd(int(x[:4])):mon[2]=29else:mon[2]=28if 1000<=int(x[:4])<=9999 and 1<=int(x[4:6])<=12 and 1<=int(x[6:])<=mon[int(x[4:6])]:return Truereturn False
a = input()
b = input()
res = 0
for i in range(int(a[:4]),int(b[:4])+1):if pd(i):mon[2]=29else:mon[2]=28tep1 = str(i)tep2 = reversed( list(tep1) )tep2 = ''.join(tep2)new_date = tep1+tep2if int(a) <= int(new_date) <= int(b):if pd2(new_date):res+=1
print(res)
四、第四题:回文日期
解题思路:枚举
按年份枚举
【Python程序代码】
a = input()
mon = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def pd(x):if x%400==0 or (x%4==0 and x%100!=0):return Truereturn False
def pd2(x):if pd(int(x[:4])):mon[2]=29else:mon[2]=28if 1000<=int(x[:4])<=9999 and 1<=int(x[4:6])<=12 and 1<=int(x[6:])<=mon[int(x[4:6])]:return Truereturn False
def work1():for i in range(int(a[:4]),10000):tep1 = str(i)tep2 = reversed(list(tep1))tep2 = ''.join(tep2)new_date = tep1 + tep2if pd2(new_date) and int(new_date)>int(a):print(new_date)return
def work2():for i in range(int(a[:4]),10000):tep1 = str(i)if tep1[0]==tep1[2] and tep1[1]==tep1[3] and tep1[0]!=tep1[1]:tep2 = reversed(list(tep1))tep2 = ''.join(tep2)new_date = tep1 + tep2if pd2(new_date) and int(new_date)>int(a):print(new_date)return
work1()
work2()
五、第五题:日期计算
解题思路:枚举
偷懒无脑用时间包
【Python程序代码】
from datetime import *
a = input()
d = int(input())
st = datetime(int(a[:4]),1,1)
dt = timedelta(1)
for i in range(d-1):st+=dt
print(st.month)
print(st.day)