初学算法——如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

题目:

如果 a+b+c=1000,且 a2+b2=c**2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

第一次尝试:

import time


start_time = time.time()

# 三重循环嵌套
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:
                print("a, b, c: %d, %d, %d"%(a, b, c))

end_time = time.time()

print("elapsed: %f"%(end_time - start_time))
print("completel")
========== RESTART: C:\Users\hy\Desktop\test.py =========
a, b, c: 0, 500, 500
a, b, c: 200, 375, 425
a, b, c: 375, 200, 425
a, b, c: 500, 0, 500
elapsed: 243.552707
completel

运行结果耗时很久

第二次尝试:

import time


start_time = time.time()

for a in range(1001):
    for b in range(1001):
        c = 1000 - a - b
        if a**2 + b**2 == c**2:
            print("a, b, c: %d, %d, %d"%(a,b,c))

end_time = time.time()
print('Elapsed: %f'%(end_time - start_time))

========= RESTART: C:\Users\hy\Desktop\test2.py =========
a, b, c: 0, 500, 500
a, b, c: 200, 375, 425
a, b, c: 375, 200, 425
a, b, c: 500, 0, 500
Elapsed: 1.470171

减少循环操作,大大节约了时间

发布了135 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44478378/article/details/104165505