Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 项目Euler 8-查找n个相邻数字的最大乘积。代码仅适用于n的某些值_Python_Python 3.x - Fatal编程技术网

Python 项目Euler 8-查找n个相邻数字的最大乘积。代码仅适用于n的某些值

Python 项目Euler 8-查找n个相邻数字的最大乘积。代码仅适用于n的某些值,python,python-3.x,Python,Python 3.x,我一直在用Python编写Euler8项目。任务是在这个很长的数字中查找13个相邻数字的最高乘积: 73167176531330624919225119674265742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557

我一直在用Python编写Euler8项目。任务是在这个很长的数字中查找13个相邻数字的最高乘积:

73167176531330624919225119674265742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450

例如,前五位的乘积为7*3*1*6*7=882

下面是我写的代码:

i = '''73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450'''

def mult(x):
    product = 1
    for num in x:
        if num != '\n':
            product *= int(num)
        else:
            continue
    return product

def main(x,y):
    z = 0
    num = 0
    while y < len(x):
        k = list(x[z:y])
        if mult(k) > num:
            num = mult(k)
        z += 1
        y += 1
    print(num)
我得到了与问题描述相同的正确答案:

1000位数字中具有最大乘积的四个相邻数字为9×9×8×9=5832

但是,在运行y=13后,输出为5377010688,这不是正确答案。正确答案应该是23514624000。欧拉项目不会给出任何提示——它只接受正确的答案或拒绝错误的答案


为什么我的程序返回y=4的正确值而不是y=13的正确值?

明白了。你的输入是错误的。在数字字符串中嵌入换行符。请尝试以下初始化语法:

i = \
'73167176531330624919225119674426574742355349194934' + \
'96983520312774506326239578318016984801869478851843' + \
'85861560789112949495459501737958331952853208805511' + \
'12540698747158523863050715693290963295227443043557' + \
'66896648950445244523161731856403098711121722383113' + \
'62229893423380308135336276614282806444486645238749' + \
'30358907296290491560440772390713810515859307960866' + \
'70172427121883998797908792274921901699720888093776' + \
'65727333001053367881220235421809751254540594752243' + \
'52584907711670556013604839586446706324415722155397' + \
'53697817977846174064955149290862569321978468622482' + \
'83972241375657056057490261407972968652414535100474' + \
'82166370484403199890008895243450658541227588666881' + \ 
'16427171479924442928230863465674813919123162824586' + \
'17866458359124566529476545682848912883142607690042' + \
'24219022671055626321111109370544217506941658960408' + \
'07198403850962455444362981230987879927244284909188' + \
'84580156166097919133875499200524063689912560717606' + \
'05886116467109405077541002256983155200055935729725' + \
'71636269561882670428252483600823257530420752963450'

有了这个变化,我得到的leni是1000——在你发布的代码中,是1019,包括19个换行符。另外,我得到了正确的答案,我在几年前解决了这个问题,并保留了代码作为参考。

我认为问题与获取子字符串有关。您正在切片一个多行字符串,因此某些切片将包含换行符而不是数字。尽管乘法代码会忽略这些换行符,但它们仍然很重要,因为它们会更改乘法中的实际位数。如果你试图找到的最大乘积跨越了一条线的边界,就像一个大y一样,你将无法正确地找到它,因为你只会比问题所期望的少乘以一位数


我建议您在进行任何切片之前,从数字串中删除换行符。最简单的方法可能是使用i=i.replace'\n'。如果需要,您还可以从mult函数中删除跳过换行符的逻辑,尽管将其保留在函数中可能不会造成太大的伤害。

欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。特别是,您试图解决的问题是什么,您希望得到什么答案?您也可以将其放在括号中,而不是所有的+反斜杠,无需+尤其是不需要反斜杠。。。
i = \
'73167176531330624919225119674426574742355349194934' + \
'96983520312774506326239578318016984801869478851843' + \
'85861560789112949495459501737958331952853208805511' + \
'12540698747158523863050715693290963295227443043557' + \
'66896648950445244523161731856403098711121722383113' + \
'62229893423380308135336276614282806444486645238749' + \
'30358907296290491560440772390713810515859307960866' + \
'70172427121883998797908792274921901699720888093776' + \
'65727333001053367881220235421809751254540594752243' + \
'52584907711670556013604839586446706324415722155397' + \
'53697817977846174064955149290862569321978468622482' + \
'83972241375657056057490261407972968652414535100474' + \
'82166370484403199890008895243450658541227588666881' + \ 
'16427171479924442928230863465674813919123162824586' + \
'17866458359124566529476545682848912883142607690042' + \
'24219022671055626321111109370544217506941658960408' + \
'07198403850962455444362981230987879927244284909188' + \
'84580156166097919133875499200524063689912560717606' + \
'05886116467109405077541002256983155200055935729725' + \
'71636269561882670428252483600823257530420752963450'