(5123321是一个非常特殊的数,从左边读和从右边读是一祥的,称这样的数为回文数。输入一个正整数n(1≤n≤54),編程求各位数字之和等于n的5位和6位十进制回文数。按从小到大的顺序输出满足条件的整数。如果输入的数不在指定的范围,输出“ 输入错误,请重新输入!",如果没有各位之和与输入的数相等的5位和6位回文数,输出“无满足条件的数!”
n = int(input())
assert 1<=n<=54,("输入错误,请重新输入!")
b = []
a = 0
for i in range(10000,1000000):
if str(i) == str(i)[::-1]:
for j in str(i):
a += int(j)
if a == n:
b.append(i)
a = 0
if len(b) == 0:
print("无满足条件的数!")
else:
print(*b)
其实只需枚举前三位即可,由前三位可得到一个唯一的5位或6位回文数,得到结果后检查是否符合条件。
代码:
from itertools import product
string = input()
try:
n = int(string)
except ValueError:
print("输入错误,请重新输入!")
exit()
if n < 1 or n > 54:
print("输入错误,请重新输入!")
exit()
# 记录是否有符合条件的数
have_answer = False
# 五位
# 使用itertools.product与三重for ... range等价,注意第一位从1开始
for a, b, c in product(range(1, 10), range(10), range(10)):
if a * 2 + b * 2 + c == n: # 判断是否符合条件
print(a, b, c, b, a, sep='')
have_answer = True
# 六位
for a, b, c in product(range(1, 10), range(10), range(10)):
if 2 * (a + b + c) == n:
print(a, b, c, c, b, a, sep='')
have_answer = True
if not have_answer:
print("无满足条件的数!")
另外这种算法已经保证了输出顺序,无需再次排序。
Error = '输入错误,请重新输入!'
while True:
try:
n = int(input('请输入一个正整数n(1≤n≤54):'))
except:
print(Error)
continue
if 1<=n<=54:
break
else:
print(Error)
res = []
for i in range(10_000,1_000_000):
if str(i) == str(i)[::-1] and sum(map(int,str(i)))==n:
res.append(i)
if res:
print(*res)
else:
print("无满足条件的数!")
光邀请,不采纳。。。累了