簡體   English   中英

projecteuler 問題 8 - 不確定我的代碼有什么問題

[英]projecteuler problem 8 - unsure on what is wrong with my code

畢達哥拉斯三元組是一組三個自然數,a < b < c,其中,

 a^2 + b^2 = c^2

例如, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.

恰好存在一個 a + b + c = 1000 的畢達哥拉斯三元組。求積abc

以上是問題。 當我運行我的代碼時,它可以正常工作並按照我的預期運行,但是程序總是在沒有找到答案的情況下完成。 任何有關如何改進我的代碼的建議將不勝感激。


for k in range (1,1000):
    c = 1000 - k 

    for i in range (1,c):
        b = c - i 
        c_sqr = c ** 2
        b_sqr = b ** 2 
        a = c - b 
        a_sqr = a ** 2

        if a_sqr + b_sqr == c_sqr:
            if a + b + c == 1000:
                product = a * b * c 
                print(f"{product} is the answer")
                exit()
            else:
                print("Pythagorean triplet!")
        else:
            josephmama = 11
            print("not a pythagorean triplet")

在您的代碼中c < 1000a + b == c是不變量。 sum (a + b + c) == 2 * c要求直角三角形的最長邊(斜邊)與其他邊的總和一樣長,並且沒有這樣的數字可以滿足它,所以if身體從不執行。

for a in range(1, 1000):
    for b in range(1, 1000):
        c = 1000 - (a + b)
        if (a ** 2 + b ** 2 == c ** 2):
            print(a * b * c)
            exit()

a 並不總是等於 c - b

通過從 c 和 a 從 c 和 b 導出 b,您不必要地限制了 b 和 a 的選項。 只需遍歷 a、b 和 c 的所有組合,添加您擁有的約束,您最終會得到您的三元組。

for a in range(1, 1000):
    for b in range(1, 1000):
        for c in range(1, 1000):
            if a+b+c == 1000:
                if a**2+b**2 == c**2:
                    if a < b:
                        if b < c:
                            print(f"My Triplet: a: {a}, b: {b}, c:{c}")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM