蓝桥杯 汉罗塔
2016-03-04 11:27
204 查看
问题描述:假设有3个分别命名为X,Y,Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,……n个圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时必须遵守下列规则:(1)每次只能移动一个圆盘;(2)圆盘可以插在X,Y和Z中的任一塔座上;(3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。求n个盘至少需移动的次数。分析:设F
表示将n个盘从按规则从X柱移到Z柱至少需要移动的次数,显然,当n=1时,F
=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
=F[n-1]+1+F[n-1]=2*F[n-1]+1;
而F[1]=1;由以上两个等式可以推出求F
的一般式,即F
=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]);}}
表示将n个盘从按规则从X柱移到Z柱至少需要移动的次数,显然,当n=1时,F
=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
=F[n-1]+1+F[n-1]=2*F[n-1]+1;
而F[1]=1;由以上两个等式可以推出求F
的一般式,即F
=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]);}}
相关文章推荐
- Web Worker
- 百度地图给map添加右键菜单(判断是否为marker)
- Python推荐书籍
- php代码编码问题
- 取消UITableview的选中状态
- 在微信浏览器中做分享到朋友圈和分享到好友
- 《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则
- springmvc-- Failed to convert property value of type 'java.lang.String' to required type
- Android ViewPager 和 TabPageIndicator 的限制滑动和禁用点击
- http状态码的含义
- java Jackson 库操作 json 的基本演示
- 构建微服务-第一章-什么是微服务_004部署和组织协调
- HTTP权威指南 第四章 连接管理
- logrotate日志轮转配置文档
- MySQL存储引擎总结
- 【leetcode】【110】Balanced Binary Tree
- java反射机制笔记
- /etc/shadow解析
- Django-hello world
- Android 去掉listView设置滚动条方向 还有不显示