项目Euler 8:从代码获取不正确的答案

时间:2018-02-22 20:46:27

标签: python python-3.x

所以我现在正试图做一些Project Euler问题。我目前正在question 8,我正在使用python来解决它。

我制作了一些代码并得到了答案,结果证明不正确。我不确定我的代码有什么问题,所以如果有人能告诉我问题是什么,我将不胜感激。我得到了56435097600的答案,这是13号码在第30列上相乘,偏移量为6,所以它开始7894 ......这是我的代码,它不是很有效或整洁,但我只是想知道问题是什么,而不是改变我的代码,使其更整洁/更有效。

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

columns  = []

def createcolumns():

    global rows,columns

    for x in range(0,50):
        tempvalue = ''
        for j in range(0,20):
            tempvalue = tempvalue + rows[j][x]
        columns.append(tempvalue)

def multiply(string):
    tempvalue = 1
    for letters in string:
        tempvalue *= int(letters)
    return tempvalue


def highestnumber():

    global rows,columns

    highest = 0

    # 37 ways per row * 20 + 7 ways per collum * 50

    for x in range(0,20):
        for g in range(0,37):
            tempvalue = ''
            for j in range(0,13):
                tempvalue = tempvalue + rows[x][j+g]
            tempvalue = multiply(tempvalue)
            if(tempvalue > highest):
                highest = tempvalue

    for x in range(0,50):
        for g in range(0,7):
            tempvalue = ''
            for j in range(0,13):
                tempvalue = tempvalue + columns[x][j+g] 
            tempvalue = multiply(tempvalue)
            if(tempvalue > highest):
                highest = tempvalue

    return highest

createcolumns()
print(highestnumber())

输出:

>> 56435097600

1 个答案:

答案 0 :(得分:0)

嗯,目的是自己解决这个问题 但是,我想指出你对这个问题的理解中的缺陷,你可以从那里接受 这个问题谈到了一个" 1000位"号。
这意味着,所有20行50个数字需要合并为1个单个数字的1000个数字 为了良好的可见性,它以矩阵形式给出 因此,使用行X列来解决此问题可能无济于事 你的逻辑适用于4位数字,因为它全部在1行 而且由于你的逻辑没有输入13位数字,我的猜测是13位数不会落入1个单行。
如果我没错。