# 百钱买百鸡问题:一百块钱买一百只鸡,公鸡5元/只,母鸡3元/只,小鸡1元/3只# 两个函数的算法,时间复杂度是一样的(都为O(n³)),但是所需时间是不同的import time
defcockOne():
start_time = time.time()for m inrange(0,101):for n inrange(0,101):for k inrange(0,301):if m + n + k ==100and5*m +3*n + k/3==100:print("{0} - {1} - {2}".format(m, n, k))
end_time = time.time()print("CostTimes:{0}".format(end_time - start_time))defcockTwo():
start_time = time.time()for m inrange(0,20):for n inrange(0,33):for k inrange(0,100):if m + n + k ==100and5*m +3*n + k/3==100:print("{0} - {1} - {2}".format(m, n, k))
end_time = time.time()print("CostTimes:{0}".format(end_time - start_time))defcockThree():
start_time = time.time()for m inrange(0,20):for n inrange(0,33):
k =100- m - n
if m + n + k ==100and5*m +3*n + k/3==100:print("{0} - {1} - {2}".format(m, n, k))
end_time = time.time()print("CostTimes:{0}".format(end_time - start_time))
cockOne()
cockTwo()
cockThree()
# 汉诺塔问题# 方法:# 当n=1时,A->C# 当n=2时,A->B,A->C,B->C# 当n=3时,把A上的两个盘子通过C移动到B上,调用递归实现# 把A剩下的一个盘子移动到C上,A->C# 把B上两个盘子借助A,移动到C上,调用递归# 当n=n时,把A上的N-1个盘子借助C移动到B上,调用递归实现# 把A剩下的一个盘子移动到C上,A->C# 把B上 N-1个盘子借助A,移动到C上,调用递归defhanNuo(n, a, b, c):'''
n:代表n个盘子
a:代表开始塔
b:代表b过渡塔
c:代表c目标塔
'''if n ==1:print(a,"->", c)returnNone'''if n == 2:
print(a, "->", b)
print(a, "->", c)
print(b, "->", c)
return None'''# 把N-1个盘子,从a塔借助于c塔,挪到b塔上
hanNuo(n-1, a, c, b)# 把A剩下的一个盘子移动到C上,A->Cprint(a,"->", c)# 把n-1个盘子,从b塔借助a塔挪到c塔
hanNuo(n-1, b, a, c)
a ="A"
b ="B"
c ="C"
n =3
hanNuo(n, a, b, c)