我正在寻找最大的回文数,它由两个三位数的乘积组成。当我输入范围(100,1000)时,答案是: 580085,但如果范围是:(600,1000),答案是: 906609。如果最大值保持不变,为什么它们会发生变化?
Total = ''
for i in range(600,1000):
for z in range(600,1000):
Pattern = str(i * z)
nrettaP = Pattern[-1::-1]
if Pattern == nrettaP:
Total = Pattern
print(Total)发布于 2020-06-28 21:27:15
(100,1000)循环并没有真正找到这样的最大数字。让我们看看循环实际检查了什么。它检查:
第二次迭代开始
您是否看到它检查的值并不总是在增加?所以你检查的最后一个回文类型的值可能不是最大的。
具体地说,580085是995x583,在外部循环的894次迭代中进行检查。906609是993x913,它是在更早的外部循环的第892次迭代中检查的。
解决此问题的一个简单方法是添加一个and (i * z) > Total条件:
Total = 0
for i in range(100,1000):
for z in range(100,1000):
Pattern = str(i * z)
nrettaP = Pattern[-1::-1]
if Pattern == nrettaP and (i * z) > Total:
Total = i * z
print(Total)此外,内部循环可以从i (for z in range(i,1000):)开始,因为一旦检查了101 * 100,就不需要检查100 * 101。
https://stackoverflow.com/questions/62623048
复制相似问题