问题描述:
有一天,我正在高速公路上开车,我偶然注意到我的里程表。和大多数里程表一样,它只显示6位数字的整数英里数。 所以,如果我的车开了300,000英里,我能够看到的数字是:3-0-0-0-0-0。
我当天看到的里程数非常有意思。我注意到后四位数字是回文数;也就是说,正序读和逆序读是一样的。例如,5-4-4-5就是回文数。 所以我的里程数可能是3-1-5-4-4-5。
一英里后,后五位数字变成了回文数。例如,里程数可能变成了是3-6-5-4-5-6。又过了一英里后,6位数字的中间四位变成了回文数。 你相信吗?一英里后,所有的6位数字都变成了回文数。
那么问题来了,当我第一次看到里程表时,里程数是多少?
《Car Talk》http://www.cartalk.com/content/puzzlers
解决思路:
首先,需要一个程序能够判断输入的字符串是否是回文数
def huiwen(a):
l=len(a)
count=0
for i in range(0,l-1):
if a[i]!=a[-i-1]:
count=count+1
print(a[i],a[-i])
break
i=i+1
if count!=0:
print('no')
return False
else:
print('yes')
return True
(程序思路是拿出词语中的每一个字母比较,有不符合条件的就拿出,计数+1)
第二步,在问题中我需要的是首先判断一个六位数的末尾四位是否是回文数,我需要一个函数进行切片,并且判断最后的几位是否是回文数。
def last_hui(a):
t=a[2:6]
if(huiwen(t)==True):
print('yes2')
第三步,判断加一后是否成立,然后遍历判断
def last_hui(a):
t=a[2:6]
g=int(a)
g=g+1
gl=str(g)
if(huiwen(t)==True):
if(huiwen(gl[1:6])==True):
print(a)
i=100000
for i in range(100000,1000000):
i=str(i)
last_hui(i)
i=int(i)
i=i+1
第四步,重复以上过程得到第三步,运行整个程序
def huiwen(a):
l=len(a)
count=0
for i in range(0,l-1):
if a[i]!=a[-i-1]:
count=count+1
break
i=i+1
if count!=0:
return False
else:
return True
def last_hui(a):
t=a[2:6]
g=int(a)
g=g+1
gl=str(g)
if(huiwen(t)==True):
if(huiwen(gl[1:6])==True):
g=int(g)+1
gl=str(g)
if(huiwen(gl[1:5])==True):
g=int(g)+1
gl=str(g)
if(huiwen(gl)==True):
print(a)
i=100000
for i in range(100000,1000000):
i=str(i)
last_hui(i)
i=int(i)
i=i+1
得到答案,第一次看里程表的时候的里程数可能是:
198888
199999
little tips:
字符串截取:a[2:6](截取后四位)