没有白走的路,每一步都算数🎈🎈🎈
题目描述:
输入一行数据,这个数据是从10000101到89991231,输出这个数据后面的第一个回文数,以及输出第一个ABABBABA型的回文数。
注意:这两个回文数可以相同。这个题目的题意应该说明一下。
输入描述:
第一行:
第一行输入一个八位数
输出描述:
输出两个数据,一个是这个数字后面的回文数,样式没有要求。
另外一个是这个数字后面的回文数,但是样式有要求。要求格式位ABABBABA型的数字。
样例输入输出:
样例输入:
20200202
样例输出:
20211202
21211212
算法思路:
由于年份很少,题目只给出8位的数字,我们构建出所有的回文年份的前面四位数字。反正用的是模拟,接着用for循环遍历所有的前面的四位数字,判断这个前面四个数字所衍生出来的回文数,是不是大于这个输入的数据,如果是,就输出。第二个数,就是直接在if条件加一个限制。
找到第一个回文数
思路:先把前面的四位数提取出来,之后用暴力法,找到我们的数组中第一个大于等于这个四位数的数组的下标,之后输出这个数据。
题目仍然提示有部分代码没有通过,看到这里出现了重复的情况
不断测试,找到bug
这里要求的是ABABBABA,那么11111111不应该存在,if条件出错。改完之后,仍旧是90%的通过率,所以只能采取对拍操作,把AC的代码和自己的代码的每个结果输出,做个对比。
import os
import sys
##while 1:
n = int(input())
Y = [10,11,12,13,20,21,22,30,31,32,40,41,42,50,51,52,60,61,62,70,71,72,80,81,82,90,91,92]
M = [1,10,11,20,21,30,40,50,60,70,80,90]
##x = len(Y)*len(M)*[0]
##print(len(Y))
##print(x)
x = []
y = [0,0,0,0]
ans = ''
for i in range(len(Y)):
if Y[i]==13:
for j in range(len(M)):
if M[j] == 11 or M[j] == 20 or M[j]==40 \
or M[j]==60 or M[j]== 90:
x.append(0)
else:
x.append(Y[i]*100+M[j])
elif Y[i]==82:
for j in range(len(M)):
if M[j]==20:
x.append(0)
else:
x.append(Y[i]*100+M[j])
else:
for j in range(len(M)):
x.append(Y[i]*100+M[j])
##print(x)
##print(len(x))
##for i in range(len(x)):
## print(x[i],end = ' ')
## if (i+1)%10==0:
## print()
for i in range(len(x)):
## print(n//10000)
if x[i]>(n//10000):
## print(n//1000)
tmp = x[i]
ans+=(str(x[i]))
## x[i] = 0
for j in range(4):
y[j] = tmp%10
tmp = tmp//10
ans+=str(y[j])
print(ans)
break
ans1 = ''
for i in range(len(x)):
a = x[i]%10
b = x[i]//10%10
c = x[i]//100%10
d = x[i]//1000
if x[i]>(n//10000) and a==c and b == d and b!=c:
tmp = x[i]
ans1+=(str(x[i]))
for j in range(4):
y[j] = tmp%10
tmp = tmp//10
ans1+=str(y[j])
if ans1!=ans:
print(ans1)
break
对拍
正确的AC代码
错误的代码
修改之后仍旧出先新错误
再次修改
这里不应改会出现0的,因为存在82200228,最开始想到是8220的2月份有29天,所以就把这里设为0,结果翻车.
正确的代码 错误的代码
仍然出错,这里我想到之前的错误可能会又犯,一查,还真是,变量一多,if,else就特别容易写错。
正确的代码 错误的代码
原因:
AC代码
原始版
import os
import sys
##while 1:
n = int(input())
Y = [10,11,12,13,20,21,22,30,31,32,40,41,42,50,51,52,60,61,62,70,71,72,80,81,82,90,91,92]
M = [1,10,11,20,21,30,40,50,60,70,80,90]
##x = len(Y)*len(M)*[0]
##print(len(Y))
##print(x)
x = []
y = [0,0,0,0]
ans = ''
for i in range(len(Y)):
if Y[i]==13:
for j in range(len(M)):
if M[j] == 11 or M[j] == 20 or M[j]==40 \
or M[j]==60 or M[j]== 90:
x.append(0)
else:
x.append(Y[i]*100+M[j])
## elif Y[i]==82:
## for j in range(len(M)):
## if M[j]==20:
## x.append(0)
## else:
## x.append(Y[i]*100+M[j])
else:
for j in range(len(M)):
x.append(Y[i]*100+M[j])
##print(x)
##print(len(x))
##for i in range(len(x)):
## print(x[i],end = ' ')
## if (i+1)%10==0:
## print()
for i in range(len(x)):
## print(n//10000)
if x[i]>=(n//10000):
## print(n//1000)
tmp = x[i]
ans+=(str(x[i]))
## x[i] = 0
for j in range(4):
y[j] = tmp%10
tmp = tmp//10
ans+=str(y[j])
if int(ans)>n:
print(ans)
break
else:
ans = ''
##print(x)
ans1 = ''
for i in range(len(x)):
a = x[i]%10
b = x[i]//10%10
c = x[i]//100%10
d = x[i]//1000
if x[i]>=(n//10000) and a!=b and b == d and a==c:
tmp = x[i]
ans1+=(str(x[i]))
for j in range(4):
y[j] = tmp%10
tmp = tmp//10
ans1+=str(y[j])
if int(ans1)>n:
print(ans1)
break
else:
ans1 = ''
修正的代码
import os
import sys
n = int(input())
Y = [10,11,12,13,20,21,22,30,31,32,40,41,42,50,51,52,60,61,62,70,71,72,80,81,82,90,91,92]
M = [1,10,11,20,21,30,40,50,60,70,80,90]
x = []
y = [0,0,0,0]
ans = ''
for i in range(len(Y)):
if Y[i]==13:
for j in range(len(M)):
if M[j] == 11 or M[j] == 20 or M[j]==40 \
or M[j]==60 or M[j]== 90:
x.append(0)
else:
x.append(Y[i]*100+M[j])
else:
for j in range(len(M)):
x.append(Y[i]*100+M[j])
for i in range(len(x)):
if x[i]>=(n//10000):
tmp = x[i]
ans+=(str(x[i]))
for j in range(4):
y[j] = tmp%10
tmp = tmp//10
ans+=str(y[j])
if int(ans)>n:
print(ans)
break
else:
ans = ''
ans1 = ''
for i in range(len(x)):
a = x[i]%10
b = x[i]//10%10
c = x[i]//100%10
d = x[i]//1000
if x[i]>=(n//10000) and a!=b and b == d and a==c:
tmp = x[i]
ans1+=(str(x[i]))
for j in range(4):
y[j] = tmp%10
tmp = tmp//10
ans1+=str(y[j])
if int(ans1)>n:
print(ans1)
break
else:
ans1 = ''
彩蛋
发现蓝桥杯这道题目的测试数据还是有一点少的。举一个小案例说明:
每日一句
摘自《《晚熟的人》》:
晚熟的人,一般简单又纯真,看起来傻乎乎,却傻人有傻福,有着谁也抢不走的人间幸福。