网站建设套餐有哪些/竞价托管外包哪家好
方法一:
不知道为什么无法通过Subtask #1,明明试了结果正确(如果有人知道希望可以告诉我下)
start = input()
end = input()
count = 0
mark_y = 0 #用来标记是否为起始年
mark_m = 0 #用来标记是否为起始月for i in range(int(start[0:4]),int(end[0:4])+1):year = 0if int((str(i)[0:2])[::-1]) > 31 or int((str(i)[2:4])[::-1]) >12 :#年份的第一、二位数倒过去就表示日期,第三、四位数表示月份。先判断倒过来是不是合法日期mark_y = 1 #为标记赋值,表示已经跳过起始年mark_m = 1continue#跳过后面的代码进入下一次循环if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:#判断是否为闰年year = 1if mark_y == 0:#判断是否为起始年份,如果是起始年份月要从给定月份开始,不是就从1月开始j_star = int(start[4:6])mark_y = 1else:j_star = 1for j in range(j_star,13):if mark_m == 0:#判断是否为起始月,如果是日期就要从给定日期开始k_star = int(start[6:8])mark_m = 1else:k_star = 1if j in(1,3,5,7,8,10,12):day = 31elif j in(4,6,9,11):day = 30else:day = 28 + yearif j < 10 :j = "0"+str(j)for k in range(k_star,day+1):#for k in range(1,day+1):if k < 10 :k = "0"+str(k)#格式化数字,为一位数前面加0date = str(i)+str(j)+str(k)r_date = date[::-1]#使字符串反向排序if date == r_date:count += 1#if date == r_date and int(start) <= int(date) <= int(end):# count += 1if date == end:print(count)exit()
print(count)
方法一改:ac了,更改部分为方法一中日期k循环中注释掉的代码
start = input()
end = input()
count = 0
mark_y = 0 #用来标记是否为起始年
mark_m = 0 #用来标记是否为起始月for i in range(int(start[0:4]),int(end[0:4])+1):year = 0if int((str(i)[0:2])[::-1]) > 31 or int((str(i)[2:4])[::-1]) >12 :#年份的第一、二位数倒过去就表示日期,第三、四位数表示月份。先判断倒过来是不是合法日期mark_y = 1 #为标记赋值,表示已经跳过起始年mark_m = 1continue#跳过后面的代码进入下一次循环if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:#判断是否为闰年year = 1if mark_y == 0:#判断是否为起始年份,如果是起始年份月要从给定月份开始,不是就从1月开始j_star = int(start[4:6])mark_y = 1else:j_star = 1for j in range(j_star,13):if mark_m == 0:#判断是否为起始月,如果是日期就要从给定日期开始k_star = int(start[6:8])mark_m = 1else:k_star = 1if j in(1,3,5,7,8,10,12):day = 31elif j in(4,6,9,11):day = 30else:day = 28 + yearif j < 10 :j = "0"+str(j)for k in range(1,day+1):if k < 10 :k = "0"+str(k)#格式化数字,为一位数前面加0date = str(i)+str(j)+str(k)r_date = date[::-1]#使字符串反向排序if date == r_date and int(start) <= int(date) <= int(end):count += 1if date == end:print(count)exit()
print(count)
方法二:简化了代码且ac,但是耗时似乎增加了
start = input()
end = input()
day =[0,31,28,31,30,31,30,31,31,30,31,30,31]
count = 0for i in range(int(start[0:4]),int(end[0:4])+1):if int((str(i)[0:2])[::-1]) > 31 or int((str(i)[2:4])[::-1]) >12 :#年份的第一、二位数倒过去就表示日期,第三、四位数表示月份。先判断倒过来是不是合法日期continue#跳过后面的代码进入下一次循环if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:#判断是否为闰年day[2] = 29else:day[2] = 28for j in range(1,13):for k in range(1,day[j]+1):date = f"{i:04d}{j:02d}{k:02d}"#格式化年月日,位数不足在前补0r_date = date[::-1]#使字符串date反序if date == r_date and int(start) <= int(date) <= int(end):count += 1print(count)