Stellen Sie sich ein rechtwinkliges Dreieck mit einer Seitenlänge von {a, b, c} und einem Triplett von ganzen Zahlen vor und lassen Sie p die Länge um es herum sein. Wenn p = 120 ist, gibt es drei Lösungen:
{20,48,52}, {24,45,51}, {30,40,50}
Was ist die maximale Anzahl von Lösungen, wenn p ≤ 1000 ist? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2039
Für jedes p habe ich den Code geschrieben, um zu überprüfen, ob "a ^ 2 + b ^ 2" gleich "(p-a-b) ^ 2" ist, während ich a und b ändere. Ich habe es irgendwie geschrieben, aber ich denke, es ist besser, es zu schreiben.
def main():
MAX = 1000
sq = [x**2 for x in range(MAX)]
p = MAX-1
d_max = 0
ans = 0
while p > 0:
(a, b) = (p//2,p//2)
d = 0
while a > 0:
if sq[a]+sq[b] == sq[p-a-b]:
d+=1
elif sq[a]+sq[b]< sq[p-a-b]:
break
while b > 0:
if sq[a]+sq[b] == sq[p-a-b]:
d += 1
elif sq[a]+sq[b] < sq[p-a-b]:
break
b -=1
a, b = a-1, a-1
if d > d_max:
ans, d_max = p, d
print ans, d_max
p -= 1
print ans
main()
Recommended Posts