算法题(1):如果a+b+c=1000,且a^2+b^2=c^2(a,b,c为自然数), 求出a,b,c可能的组合。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43193386/article/details/100172962

题目:如果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

猜你喜欢

转载自blog.csdn.net/qq_43193386/article/details/100172962