题目:如果a+b+c=1000,且a^2+b^2=c^2(a,b,c为自然数), 求出a,b,c可能的组合。
解决思路:穷举法,首先让a=0,b=0,c=1~1000,求其中的组合,以此类推:
"""
如果a+b+c=1000,且a^2+b^2=c^2(a,b,c为自然数), 求出a,b,c可能的组合
"""
# 算法1
import time
start_time = time.time()
result_list = []
for a in range(1001):
for b in range(1001):
for c in range(1001):
if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
result_list.append((a, b, c))
end_time = time.time()
computing_time = end_time - start_time
print(result_list)
print(computing_time)
运算结果:
[(0, 500, 500), (200, 375, 425), (375, 200, 425), (500, 0, 500)]
137.0877537727356
优化:
c完全可以用c=1000-a-b来表示,这样可以减少1000次的循环
"""
如果a+b+c=1000,且a^2+b^2=c^2(a,b,c为自然数), 求出a,b,c可能的组合
"""
import time
# 优化算法1
start_time = time.time()
result_list = []
for a in range(1001):
for b in range(1001):
c = 1000 - a - b
if a ** 2 + b ** 2 == c ** 2:
result_list.append((a, b, c))
end_time = time.time()
computing_time = end_time - start_time
print(result_list)
print(computing_time)
运算结果:
[(0, 500, 500), (200, 375, 425), (375, 200, 425), (500, 0, 500)]
1.103081464767456