Python Project Euler 8程序未提供正确答案
我找不到问题的正确答案 我有以下代码:Python Project Euler 8程序未提供正确答案,python,python-3.x,Python,Python 3.x,我找不到问题的正确答案 我有以下代码: import time print("This program will provide the largest product of 13 adjacent digits from a given number") num = str(input("Enter the number from which you want to find the largest product")) start = time.time() biggest = 0
import time
print("This program will provide the largest product of 13 adjacent digits from a given number")
num = str(input("Enter the number from which you want to find the largest product"))
start = time.time()
biggest = 0
for i in range(len(num) - 12):
a = int(num[i])
b = int(num[i + 1])
c = int(num[i + 2])
d = int(num[i + 3])
e = int(num[i + 4])
f = int(num[i + 5])
g = int(num[i + 6])
h = int(num[i + 7])
i = int(num[i + 8])
j = int(num[i + 9])
k = int(num[i + 10])
l = int(num[i + 11])
m = int(num[i + 12])
product = a * b * c * d * e * f * g * h * i * j * k * l * m
if product > biggest:
biggest = product
print(biggest)
end = time.time()
print(end - start)
最后我得到了823011840,这是错误的答案,但我不知道这个程序有什么问题。在内部循环中创建的一个变量与控制外部循环的变量同名。这样一来,变量
j
、k
、l
、n
和m
永远不会得到它们的预期值,而是得到j=int(num[int(num[i+8])+9])
等
循环的基本功能是:
for outer_i in range(len(num) - 12):
i = outer_i
a = int(num[i])
b = int(num[i + 1])
c = int(num[i + 2])
d = int(num[i + 3])
e = int(num[i + 4])
f = int(num[i + 5])
g = int(num[i + 6])
h = int(num[i + 7])
inner_i = int(num[i + 8])
i = inner_i
j = int(num[i + 9])
k = int(num[i + 10])
l = int(num[i + 11])
m = int(num[i + 12])
product = a * b * c * d * e * f * g * h * i * j * k * l * m
if product > biggest:
biggest = product
除了为外部变量使用不同的名称外,以下是使用滑动窗口方法提高速度的建议:
- 将num拆分为零之间的部分
- 对于每个部分“num_part”:
- 如果少于13个元素,则跳过它
- 计算p,前13个元素的乘积
- 最大性检验p
- 对于从13开始的每个t:
- 用p除以num_部分[t-13],再乘以num_部分[t]
- 最大性检验p
打印(最大值(functools.reduce(λa,b:a*b,map(int,数据[i:i+13]),1)范围内的i(len(数据)-12))