蓝桥杯 汉罗塔

来源:互联网 发布:中华软件 编辑:程序博客网 时间:2024/05/16 17:42
问题描述:假设有3个分别命名为X,Y,Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,……n个圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时必须遵守下列规则:(1)每次只能移动一个圆盘;(2)圆盘可以插在X,Y和Z中的任一塔座上;(3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。求n个盘至少需移动的次数。分析:设F[n]表示将n个盘从按规则从X柱移到Z柱至少需要移动的次数,显然,当n=1时,F[n]=1;当n>1时,我们将移动盘之的过程分为三步:1,将X柱上的n-1个盘依靠Z柱移到Y柱上,这个需要F[n-1]步;2,将X柱上剩下的一个盘(最大的盘)移到Z柱上,这个需要1步;3,将Y柱上的n-1个盘依靠X柱移到Z柱上,这个需要F[n-1]步;所以移完n个至少需要的步数F[n]=F[n-1]+1+F[n-1]=2*F[n-1]+1; 而F[1]=1;由以上两个等式可以推出求F[n]的一般式,即F[n]=2^n-1;java详解public class Main{ public static void main(String args[]){ double a[]=new double[64]; a[0]=1; a[1]=1; a[2]=3; a[3]=7; for(int i=4;i<=64;i++){ a[i[=a[i-1]*2+1;} System.out.println(a[64]);}}
0 0
原创粉丝点击