Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Project Euler 8程序未提供正确答案_Python_Python 3.x - Fatal编程技术网

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):
打印(最大值(functools.reduce(λa,b:a*b,map(int,数据[i:i+13]),1)范围内的i(len(数据)-12))