世界完全对称日是指公历纪年日期中数字左右完全对称的日期。如2010年1月2日(20100102),2011年11月2日(20111102)等。
那么根据月份和日期推导出完全对称日的年份就是一种方法。比如01月01日对应的对称日是1010年01月01日,12月31日对应的对称日是1321年12月31日,一年365天就有365个对称日,再加上闰年的02月29日对应的9220年02月29日,一共就有366个对称日。
所以我的想法是先将一年365天的月份日期打印出来,再分别对月和日的数字进行处理,就得到年份。比如今天11月02日,那么年份的前两位就是02%10*10+02/10=20,这里,2%10=2,02/10=0,所以2*10+0=20,年份的后两位的算法可以如法炮制。推广为一般的公式就是,比如设为i月j日,年份高两位x=j%10*10+j/10,年份低两位是y=i%10*10+i/10,那么打印出来就是xy年i月j日。最后,只需将i从1循环到12,j从1到31,另外还要考虑大小月和2月的情况,就能将366个完全对称日输出。
Python是一门非常强大的语言,利用它内置的数据结构,可以方便对数据进行处理。比如本程序中,将对称日化为一串数字,例如今天就是20111102,将366个对称日放入列表list中,list.sort()可以方便地对列表中的元素进行从小到大的排序,最后逐个输出列表中的元素即可。
在下是初学python的菜鸟,请大虾们不吝赐教,如果有错请指正,有更好的方法一定要分享哦~
1.[代码][Python]代码
list=[]
for i in range(1,13):
for j in range(1,32):
if i==2 and j>28:
break
elif j>30 and (i==4 or i==6 or i==9 or i==11) :
break
else:
x=j%10*10+j/10
y=i%10*10+i/10
num=x*1000000+y*10000+i*100+j
list.append(num)
list.append(92200229)
list.sort()
for k in range(0,len(list)):
year=list[k]/10000
month=list[k]%10000/100
day=list[k]%100
print "%04d"%year,"%02d"%month,"%02d"%day
2.[图片] 结果.PNG