Project Euler: 第8题
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
我已经在这个问题上纠结了好几个小时了,还是搞不定。我在纸上试过这个算法,结果很好。你能给我一些提示,告诉我哪里出错了吗?
7 个回答
1
这里有一点需要注意:range(n, m)
这个函数会给你从 n 开始到 m 之前的所有数字,也就是说 n 是包含在内的,而 m 是不包含的。例如,range(N, N+4)
会给你接下来的 四个 数字(但是题目其实想要的是 五个 连续的数字)。
3
我觉得你可能误解了问题。这里说的“5个连续的数字”,其实只是指5个数字一个接一个地排列在一起,并不是说这些数字的值要是连续的(也就是说,每个数字要比前一个大)。所以你可以把所有关于is_cons
的逻辑都扔掉,只需要检查每一组5个数字的乘积就可以了。