1

ここで誰かが提案したように、アルゴリズムの背後にある数学を理解するのに役立つプロジェクトオイラー問題を行っています。コードは必要ありません。正しい方向にプッシュして、どこが間違っているかを突き止めたいだけです。

def genYieldThreeValues(stop):

    j = 999
    while stop >99 and j > 99:
        multiples = str(stop * j)
        front = multiples[:3] # get front three numbers
        back = multiples[-3:] # get last three numbers
        stop-=1
        j-=1
        yield  [front,back,multiples] # yield a list with first three, last three and all numbers


def highestPalindrome(n):

    for x in genYieldThreeValues(n):
        if   x[1] ==x[0][::-1]: # compare first three and last three digits reversed
            return x[2]         # if they match return value

print(highestPalindrome(999))

(編集: 新しいコード)

def genYieldThreeValues(stop):
while stop >99:
    yield stop

def highestPalindrome(n):
highest = 0
for x in range(genYieldThreeValues(n).next(),99,-1):
    for i in range(x,99,-1):
        product = str(x*i)
        if product[::-1]  == product and product > highest:
            if len(product) > 5:
                highest = product
return highest
4

1 に答える 1

1

同じループ内で と のstop両方をデクリメントしているため、正方形、、などのみが生成されます。コードをさらに調べずに、を定数のままにして、代わりに の複数の値を持つジェネレーターを使用することをお勧めします。j999*999998*998997*997stopgenThreeValuesstop

于 2013-10-12T16:14:19.817 に答える