澳门至尊网站-首页

您的位置:澳门至尊网站 > 程序编程 > 汉诺塔难题,汉诺塔难题及list

汉诺塔难题,汉诺塔难题及list

2019-10-29 04:37

规则

  1. 每一趟运动二个市场价格
  2. 任曾几何时候大盘子在底下,小盘子在上边

写在眼下:笔记全套是跟着导师一齐敲的代码,近日计算机Watt了,所以只能用老爷机的日记本记下老师上课讲的东西,但本身运营不了

方法

假设共n个盘子

  • 当n=1时:
    1. 平昔把A上的一个盘子移动到C上(A->C)
  • 当n=2时:
    1. 把小盘子从A放到B上(A->B)这里开头应用参数,rsc源地址=A,dst目标地点=B
    2. 把大盘子从A放到C上( A->C)rsc=A, dst=C
    3. 把小盘子从B放到C上(B->C)rsc=B, dst=C
  • 当n=3时:
    1. 把A上的四个盘子,通过C移动到B上去, 调用递归完毕(A-C->B)rsc=A, trans中转=C, dst=B
    2. 澳门至尊网站,把A上剩余的贰个最大盘子移动到C上(A->C)rsc=A, dst=C
    3. 把B上多少个盘子,依据于A,挪到C上去, 调用递归(B-A->C)rsc=B, trans=A, dst=C
  • 当n=n时:

    1. 把A上的n-1个盘子,依靠于C,移动到B上去,调用递归(A-C->B)rsc=A, trans=C, dst=B

    2. 把A上的最大学一年级个市场价格,移动到C上(A->C)rsc=A, dst=C

    3. 把B上n-1个盘子,依靠于A,移动到C上, 调用递归(B-A->C)rsc=B, trans=A, dst=C

历次都以先将其他圆盘移到支持柱子上,再将最下边的移到C,然后再把本来柱子作为协理柱子,重复

特别感激的是xx大学的的刘先生,我都是边看她的课,边学他一块敲代码,然后中午谐和看,本人通晓,感激老师。

代码完成

def move(n, a, b, c):
'''
汉诺塔的递归实现
n:代表几个盘子
a:代表第一个塔,rsc
b:代表第二个塔,trans
c:代表第三个塔, dst
'''
    if n == 1:
        print(a, '=>', c)
    else:
        move(n-1, a, c, b)
        print(a, '=>', c)
        move(n-1, b, a, c)

 

汉诺塔难点
- 规则
1、每趟运动四个市场价格
2、任曾几何时候大盘子在底下,小盘子在上边

  • 方法
    1、n=1:直接把A上的二个行情移动到C上,A-》C
    2、n=2:
    1、把小盘子从A放到B上,A->B
    2、把大盘子从A放到C上,A->C
    3、把小盘子从B放到C上,B->C
    3、n=3:

1、把A上的八个盘子,通过C移动到B上,调用递归完毕

2、把A上剩余的二个最大盘子移动到C上,A->C

3、把B上几个盘子,依据于A,移动到C上去,调用递归
4、n=n:

1、把A上的n-1个大盘子,凭借于C,移动到B上去,调用递归

2、把A上的最大盘子,也是独步天下二个,移动到C上去,A->C

3、把B上n-1个盘子,依附于A,移动到C上去,调用递归

 1 def hano(n,a,b,c):
 2     '''
 3     汉诺塔的递归实现
 4     n:代表几个盘子
 5     a:代表第一个塔,开始的塔
 6     b:代表第二个塔,中间过度的塔
 7     c:代表第三个塔,目标塔
 8     '''
 9     if n==1:
10         print(a, "-->", b)
11     if n==2:
12         print(a, "-->", b)
13         print(a, "-->", c)
14         print(b, "-->", c)
15         return None
16     #把n-1个盘子,从a塔借助于c塔,挪到b塔上去
17     hano(n-1,a,c,b)
18     print(a,"-->",c)
19     #把n-1个盘子,从b塔,借助于a塔,挪到c塔上去
20     hano(n-1,b,a,c)
21 
22 a="A"
23 b="B"
24 c="C"
25 n=1
26 hano(n,a,b,c)
27 n=2
28 hano(n,a,b,c)
29 n=3
30 hano(n,a,b,c)
31 n=5
32 hano(n,a,b,c)

List(列表)

del:删除命令,假使使del之后,id的值和删除前不形似,则印证生成了一个新的list

a=[1,2,3,4,5,6]
prin(id(a))
del a(2)
print(id(a))

del多少个变量后不能够三回九转运用此变量

del a
print(a) 
报错

 

列表运算

  • 应用加号链接四个列表

    a=[1,2,3,4,5] b=[5,6,7,8,9] d=['a','b','c'] c=a+b+d print(c)

-使用乘号操作列表
列表直接跟三个莫西干发型相乘
一定于把N个列表接在同步

a=[1,2,3,4,5]
b=a*3
print(b)

-成员资格运算
-便是推断三个元素是不是在list里面

a=[1,2,3,4,5]
b=8
#c是一个布尔值
c= b in a 
print(c)
b=4
print(b in a )

#  not in
a=[1,2,3,4,5]
b=9
print(b not in a )

 

链表的遍历

- for
- while
# for in list
a=[1,2,3,4,5]
#挨个打印出来里面的元素
for i in a:
    print(i)

b=["i love zhangsiqi"]
for i in b:
    print(i)

range
in 前面的变量须求是可迭代的剧情

for i in range(1,10):
    print(i)
print(tyoe(range(1,10)))

while循环访谈list(但日常不要while遍历list)

a=[1,2,3,4,5,6]
length = len(a)
#index表示的是list的下标
index = 0
while index < length:
    print(a[index])
    index += 1

 

双层列表循环
-a为嵌套列表,恐怕叫做双层列表

a = [["one,1"],["two",2],["three",3]]
for k,v in a :
    print(k."---",v)

双层列表循环变异1
-a为嵌套列表,只怕叫做双层列表

a = [["one",1,"eins"],["two",2],["three",3,4,5,6,7]]
for k,v in a :
    print(k."---",v)
报错

双层列表循环变异2
a为嵌套列表,也许叫做双层列表

a = [["one",1,"eins"],["two",2,"zwei"],["three",3,"drei"]]
#这个例子说明,k,v,w的个数应该跟解包出来的变量个数一致
for k,v ,win a :
    print(k."---",v,"--",w)

 

列表内涵:list content

  • 通过轻易方法创建列表
  • for创建

    a = ["a","b","c"] #用list a成立贰个list b #上面代码的含义是,对于全数a中的成分,各个放入新列表b中 b = [i for i in a ] print(b)

-对a中具有因素乘以10,生成多个新的list

a = [1,2,3,4,5,6]
#用list a创建一个list b
#下面代码的含义是,对于所有a中的元素,逐个放入新列表b中
b = [i*10 for i in a ]
print(b)

-还是能过滤原本list中的内容并归入新列表中

-例如原有裂变a,要求把全体a中的偶数生成新的列表b

a = [x for x in range(1,35)] #生成一个从1到34的一个列表
#把a中所有偶数生成一个新列表b
b = [m for m in a if m%2 ==0]
print(b)

-列表生成式能够嵌套

八个列表a,b

a = [i for i in range(1,10)] #生成list a
print(a)
b = [i for i in range(100,400) if i%100 == 0]#求偶数
print(b)

#列表生成可以嵌套,此时等于两个for循环嵌套
c = [m+n for m in a for n in b]
print(c)

#上面代码跟下面代码等价
for m in a :
    for n in b:
        print(m+n,end=" ")
print()

#嵌套的列表生成式也可以用条件表达式
c = [m+n for m in a for n in b if m+n<250]
print(c)

有关列表的常用函数

#len:求列表的长度
a = [x for x in range(1,100)]
print(len(a))

#max:求列表中的最大值
#min:同理
print(max(a))

b = ["man","female","python"]
print(max(a))

#list:将其他格式的数据转换成list
a = [1,2,3]
print(list(a))

s = "i love zhangsiqi"
print(list(s))

#把range产生的内容转换成list
print(list(range(12,19)))

 

本文由澳门至尊网站发布于程序编程,转载请注明出处:汉诺塔难题,汉诺塔难题及list

关键词: