企业做网站乐云seo快速上线,旺道seo优化,html网站注册页面,公众号购买网站题目 题目分析
为了找到满足条件的放置方法#xff0c;可以带入总盘数为2和3的情景#xff0c;用递归做法实现。 2. A中存在1 2两个盘#xff0c;为了实现最少次数放入C且上小下大#xff0c;先将1放入B#xff0c;再将2放入C#xff0c;最后将1放入C即可。同理当A中存在…题目 题目分析
为了找到满足条件的放置方法可以带入总盘数为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 sum#设置全局变量sum统计移动次数if (n1):#当移动到A柱只有一个盘子的时候sum1if(summ):#此时如果要满足题目要求条件当移动到A柱只有一个盘子的时候A的最后一个盘子必须移动到C柱print(f#{n}: {x}-{z})else:#A的最后一个盘子的上一个盘子一定是移动到Bhanio(x,z,y,n-1)#一定是从A移动到Bsum1if summ:print(f#{n}: {x}-{z})hanio(y,x,z,n-1)#此时是最后一步把B柱的盘放到C柱
n,mmap(int,input().split())
sum0
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,m#定义全局变量element st[x].pop()#pop方法移出并返回值st[y].append(element)sum 1a,b , if x1: aAif x2: aBif x3: aCif y1: bAif y2: bBif y3: bCif sum m: print(#,n,: ,a,-,b, sep)# 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)#初始化栈st[1]表示A
hanoi(n,1,2,3)
print(sum)