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
我已经花了好几个小时来解决这个问题,但我没法解决这个问题。我试过在纸上做过这个算法,效果很好。。你能告诉我怎么了吗?在
Marijus,我建议你重新考虑一下算法,这是一种非常奇怪的解决问题的方法。它要简单得多,使用函数
max
,一次迭代(例如,generator expression),并尝试不使用时间变量。它可以用2/3行优雅地求解(事实上,您可以用一行代码来完成,但是抽象product函数是可取的,因为您将在其他Euler问题中使用它)我想你误解了这个问题。当它说“5个连续的数字”时,这只意味着5个数字一个接一个地出现——你不应该检查这些数字的值是否连续(即每个数字都大于最后一个数字)。所以扔掉所有的
is_cons
逻辑,只需检查每个5位数块的乘积。在有一件事看起来是错误的:
range(n, m)
给出了从n包含到m exclusive的数字,也就是说,range(N, N+4)
给出了四个下一个索引(问题需要五个连续的数字)。在相关问题 更多 >
编程相关推荐