勾股定理中3個數的關系是,a2+b2=c2。找出30以內的(c<=30)所有滿足這個關系的三元組,并做為元組加入一串列中。
uj5u.com熱心網友回復:
list_a = list()
for i in range(1, 31):
for j in range(1, 31):
for k in range(1, 31):
if i**2 + j**2 = k**2:
list_a.append((i,j,k))
print('30內滿足勾股定理的有:/n{list_a}')
供參考,這個還可以優化,但是這個是簡單的做法
uj5u.com熱心網友回復:
list_a = list()
for i in range(1, 31):
for j in range(1, 31):
for k in range(1, 31):
if i**2 + j**2 = k**2:
list_a.append((i,j,k))
print('30內滿足勾股定理的有:/n{list_a}')
供參考,這個還可以優化,但是這個是簡單的做法
uj5u.com熱心網友回復:
def getPythagoreanlist(num): # 該函式時間復雜度為 2 應該運行的不會太慢
""" 勾股定理中3個數的關系是,a2+b2=c2。找出30以內的(c<=30)所有滿足這個關系的三元組,并做為元組加入一串列中。
"""
ret = [] # 回傳值定義
if num >= 3:
for i in range(3, num+1): # i設為三元組中最大數
for j in range(1, i): # j設為三元組中最小數
x = (i*i) - (j*j) # 用大數的平方減去小數
y = int(x ** 0.5) # 求大數減小數的算數平方根的取整
if y * y == x and y > j:
# print(j, y, i)
ret.append((j, y, i))
return ret
if __name__ == "__main__":
r = getPythagoreanlist(30) # 你規定的30
print(r) # 列印一下
m = int(input("請輸入最大的數:"))
R = getPythagoreanlist(m) # 讀取輸入的數
print("符合條件的全部三元組:", R)
# 給你正解,拿走不謝~
uj5u.com熱心網友回復:
忘記說明了,我寫的那個函式不會漏也不會多 而且時間復雜度應該是最低的uj5u.com熱心網友回復:

非常感謝
uj5u.com熱心網友回復:
為什么運行出來是30內滿足勾股定理的有:/n{list_a}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/66828.html
上一篇:Python 為什么感覺split并沒有取出掉標點符號 而是sorted排序之后才莫名省略的?
下一篇:入門小白求教
