回文数はどちらの方法でも同じように読めます。2 つの 2 桁の数の積から作られる最大の回文は 9009 = 91 × 99
です。2 つの 3 桁の数の積から作られる最大の回文を求めます。
以下は、この問題に対する私の解決策です。それは機能しますが、使用した別のソリューションに気付きました
if x*y < max_seen: continue
このような:
def biggest():
big_x, big_y, max_seen = 0, 0, 0
for x in xrange(999,99,-1):
for y in xrange(x, 99,-1):
if x*y < max_seen: continue
if is_palindrome(x*y):
big_x, big_y, max_seen = x,y, x*y
私が得られないのは、その行がどのように機能するかです。1 回max_seen = 0
目x*y
は999*999
0 より大きいため、条件が満たされず、次の行が実行されます。理にかなっています。しかし、最終的には、なぜここにあるのでしょうかmax_seen
。x*y
continue
条件が満たされているかどうかに関係なく、プログラムは続行されるため、この行は必要ないようです。continue
Python での動作を理解していないのではないかと思います。
これが私のアプローチです:
def find_biggest():
big_x, big_y, new_pal, max_seen = 0, 0, 0, 0
for x in range(999, 100, -1):
for y in range(x, 100, -1):
if is_palindrome(x*y) == True:
new_pal = x*y
if new_pal > max_seen:
big_x, big_y, max_seen = x, y, new_pal
効率の観点から、プログラムはすべての newx*y
が< max_seen
になるとすぐに終了する必要がありますが、999*100
未満です(つまり、 、 など998*900
をまだチェックする必要があるため、まだ停止できませんでした)。それをどのようにコーディングしますか?998*y
997*y