【问题标题】:Python - long halt while calculating palindrome numberPython - 计算回文数时长时间停止
【发布时间】:2018-11-02 02:32:14
【问题描述】:

我正在尝试找到由两个 3 位数字与我的代码相乘的最大回文数。它适用于 2 位数和 3 位数,但是当我尝试使用 4 位数时,它不再起作用了。最后没有输出或“进程以退出代码0完成”。它就像在无限循环中一样停止了。

palin = 0
for x in range(1, 10000):
    for y in range(1, 10000):
        mult = x * y

        if str(mult) == str(mult)[::-1]:
            if mult > palin:
                palin = mult

print(palin)

我哪里做错了?大概一个月前我才开始使用Python,所以我的代码仍然没有效果

【问题讨论】:

  • 这是一个无限循环,你知道,它很长......
  • 您的算法没有停止。它很慢(而且是错误的)。所以你必须等待几分钟才能得到任何输出。
  • 这是 PrjectEuleur 网站上的第 4 个问题,名为 Largest palindrome product。你的算法不正确,它不是一个无限循环。但是完成计算可能需要很长时间。更好的方法是优化你的代码。也许有一些数学......

标签: python for-loop if-statement palindrome halting-problem


【解决方案1】:

您的算法不正确。第二个if 应与mult = x*y 处于同一级别。

我稍微修改了您的代码。使用下面的代码,您会看到算法不会停止。它只是超级慢。你将不得不等待几分钟。

pa = 0
for x in range(1, 10000):
    if x % 100 == 0:
        print(x)
    for y in range(x, 10000):
        m = x*y
        if str(m) == str(m)[::-1]:
            if m > pa:
                pa = m
print(pa)

我将第二个 range(1, 10000) 更改为 range(x, 10000) 以将 1*2 和 2*1 等重复项消除为单个 1*2。

如果您想要加速,请考虑切换到 C 或 C++。

您还可以反转迭代顺序以实现极大的加速

for x in range(10000, 0, -1):
    for y in range(10000, 0, -1):
        m = x*y
        if str(m) == str(m)[::-1]:
            print(m)
            exit(0)

【讨论】:

  • sorry my bad...它实际上与 mult = x * y 处于同一级别。我写错了,我已经编辑过了
  • 您使用此代码将时间缩短了一半,使用我之前的代码大约需要 115 秒,但使用您的代码,只需 61 秒,非常感谢。
【解决方案2】:

这是一个无限循环,你知道,它很长......

但实际上不知何故(也许我的电脑很快 :-))代码只运行了大约 15 秒...

这样很好。

没有停顿,只是很慢。

【讨论】:

  • 此代码并未涵盖 OP 想要考虑的所有情况。你的代码只测试 1*1, 2*2, 3*3 .... OP 想要测试 1*1, 1*2, 1*3 ... 2*1, 2*2, 2*3 .... 10000*1、10000*2 ... 10000*10000。使用 zip,您只测试了所有情况的 0.01%。
  • @Hoblovski 完成!
猜你喜欢
  • 1970-01-01
  • 2014-04-17
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多