没有白走的路,每一步都算数🎈🎈🎈
题目描述:
输入一行数据,这个数据是从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 =
''
彩蛋
发现蓝桥杯这道题目的测试数据还是有一点少的。举一个小案例说明:
每日一句
摘自《《晚熟的人》》:
晚熟的人,一般简单又纯真,看起来傻乎乎,却傻人有傻福,有着谁也抢不走的人间幸福。
转载:https://blog.csdn.net/weixin_54201782/article/details/128596161