Euler 8项目:从代码中获得错误的答案



我目前正在尝试做一些项目Euler问题。我目前正在问题8中,并且正在使用Python来解决它。

我制作了一些代码并得到了答案,事实证明是不正确的。我不确定我的代码问题是什么,所以我很感激有人可以告诉我问题是什么。我得到了56435097600的答案,这是在第30列上乘以6的13个数字,偏移了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 column * 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

好吧,目的是自己解决这个问题。
但是,我想指出您对这个问题的理解中的缺陷,您可以从那里开始。
这个问题谈论了一个" 1000位"号码。
这意味着,所有20行的50行都需要合并为1个单个数字的1000位数字。
它以矩阵形式给出,只是为了良好的可见性。
因此,使用行X列解决此问题可能无济于事。
您的逻辑对4位数字的运行良好,因为它们全部为1行。
而且由于您的逻辑失败了13位数字,我的猜测是13位数字不属于1行。
如果我没有错。

最新更新