首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“For-loop”的值

“For-loop”的值
EN

Stack Overflow用户
提问于 2020-06-28 21:17:13
回答 1查看 28关注 0票数 1

我正在寻找最大的回文数,它由两个三位数的乘积组成。当我输入范围(100,1000)时,答案是: 580085,但如果范围是:(600,1000),答案是: 906609。如果最大值保持不变,为什么它们会发生变化?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2020-06-28 21:27:15

(100,1000)循环并没有真正找到这样的最大数字。让我们看看循环实际检查了什么。它检查:

  • 100 * 100
  • 100 * 101
  • ...
  • 100 * 998
  • 100 * 999 <--外环第一次迭代结束
  • 101* 100 <--外环

第二次迭代开始

  • 101* 101
  • ...

您是否看到它检查的值并不总是在增加?所以你检查的最后一个回文类型的值可能不是最大的。

具体地说,580085是995x583,在外部循环的894次迭代中进行检查。906609是993x913,它是在更早的外部循环的第892次迭代中检查的。

解决此问题的一个简单方法是添加一个and (i * z) > Total条件:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62623048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档