题目

题目分析
- 为了找到满足条件的放置方法,可以带入总盘数为2和3的情景,用递归做法实现。
2.== A中存在1 2两个盘,为了实现最少次数放入C且上小下大,先将1放入B,再将2放入C,最后将1放入C即可。同理当A中存在1 2 3 三个盘时,可将1 2盘看成整体,再理解整个过程可以发现,把N个圆盘的问题递归成N-1个圆盘的问题即可。==
题解1(递归)
def hanio(x,y,z,n):global sumif (n==1):sum+=1if(sum==m):print(f"#{n}: {x}->{z}")else:hanio(x,z,y,n-1)sum+=1if sum==m:print(f"#{n}: {x}->{z}")hanio(y,x,z,n-1)
n,m=map(int,input().split())
sum=0
hanio('A','B','C',n)
print(sum)
题解2(栈)
- 利用栈实现。
st = [[0 for i in range(30000)] for i in range(4)]
sum,m = 0,0
def move(x, y, n):global sum,melement = st[x].pop()st[y].append(element)sum +=1a,b ='','' if x==1: a='A'if x==2: a='B'if x==3: a='C'if y==1: b='A'if y==2: b='B'if y==3: b='C'if sum == m: print('#',n,': ',a,"->",b, sep="")
def hanoi(n,x, y, z): if (n == 1): move(x,z,n)else:hanoi(n-1,x, z, y)move(x,z,n)hanoi(n-1,y, x, z)
n, m = map(int, input().split())
for i in range(n): st[1].append(i)
hanoi(n,1,2,3)
print(sum)