算法引入
# CY3761 | 2021-11-29 11:38
# 选择合适的数据结构, 设计一个巧妙的算法, 可以让程序的执行时间快上不少, 消耗的资源也会得到降低
# 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?
# 解题4步
# 分析需求 设计算法 代码实现 验证结果
# 分析需求
# 求出符合 a+b+c=1000 且 a^2+b^2=c^2 (a,b,c 为自然数) 所有a、b、c可能的组合
# 设计算法
# 尝试 a b c 的所有组合 判断当前组合是否满足以上条件 满足就输出 枚举法
# 算法是一系列解决问题的清晰指令,是计算机处理信息的本质!
# 算法是独立存在的一种解决问题的方法和思想!
# 算法特性
# 输入项: 算法具有0个或多个输入
# 输出项: 算法至少有1个输出
# 有穷性: 算法必须能在有限个步骤之后终止,并且需要在可接受的时间内
# 确切性: 算法的每一步骤必须有确切的定义
# 可行性: 算法的每一步都是可行的
# 代码执行多久
import time
import types
def handler(algo):
print('-' * 80)
stime = time.time()
if isinstance(algo, types.FunctionType):
c = algo()
etime = time.time()
print('执行时间', (etime - stime), '循环次数', c)
# 按照老师的3个循环
# 好慢呀
def algo_01():
s1 = 0
s2 = 1000 + 1
co = 0
for a in range(s1, s2):
for b in range(s1, s2):
for c in range(s1, s2):
co += 1
if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
print(f'a = {a}, b = {b} c = {c}')
return co
def algo_02():
s1 = 0
s2 = 1000 + 1
co = 0
for a in range(s1, s2):
for b in range(s1, s2):
co += 1
c = 1000 - a - b
if a ** 2 + b ** 2 == c ** 2:
print(f'a = {a}, b = {b} c = {c}')
return co
handler(algo_01)
handler(algo_02)