Euler项目:问题8

2024-05-29 09:54:23 发布

您现在位置:Python中文网/ 问答频道 /正文

n = # some ridiculously large number, omitted
N = [int(i) for i in str(n)]
maxProduct = 0
for i in range(0,len(N)-4):
    newProduct = 1
    is_cons = 0
    for j in range(i,i+4):
        if N[j] == N[j+1] - 1:
        is_cons += 1
    if is_cons == 5:
        for j in range(i,i+5):
            newProduct *= N[j]
        if newProduct > maxProduct:
            maxProduct = newProduct
print maxProduct

我已经花了好几个小时来解决这个问题,但我没法解决这个问题。我试过在纸上做过这个算法,效果很好。。你能告诉我怎么了吗?在


Tags: innumberforifisrangesomeint
3条回答

Marijus,我建议你重新考虑一下算法,这是一种非常奇怪的解决问题的方法。它要简单得多,使用函数max,一次迭代(例如,generator expression),并尝试不使用时间变量。它可以用2/3行优雅地求解(事实上,您可以用一行代码来完成,但是抽象product函数是可取的,因为您将在其他Euler问题中使用它)

我想你误解了这个问题。当它说“5个连续的数字”时,这只意味着5个数字一个接一个地出现——你不应该检查这些数字的值是否连续(即每个数字都大于最后一个数字)。所以扔掉所有的is_cons逻辑,只需检查每个5位数块的乘积。在

有一件事看起来是错误的:range(n, m)给出了从n包含到m exclusive的数字,也就是说,range(N, N+4)给出了四个下一个索引(问题需要五个连续的数字)。在

相关问题 更多 >

    热门问题