題目

題目分析
- 為了找到滿足條件的放置方法,可以帶入總盤數(shù)為2和3的情景,用遞歸做法實現(xiàn)。
2.== A中存在1 2兩個盤,為了實現(xiàn)最少次數(shù)放入C且上小下大,先將1放入B,再將2放入C,最后將1放入C即可。同理當A中存在1 2 3 三個盤時,可將1 2盤看成整體,再理解整個過程可以發(fā)現(xiàn),把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(棧)
- 利用棧實現(xiàn)。
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)