java塔_Java-河内塔问题
河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。事实上,若有n个盘子,则移动完毕所需之次数为2^n
- 1,所以当盘数为64时,则所需次数为:264- 1 = 18446744073709551615 为5.05390248594782e+16年,也就是约5000世纪,如果对这数字没什么概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右。
思路:
当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。
当A塔上有两个盘子是,先将A塔上的1号盘子移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。
当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上。
所以:
当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。
public class Main {
static int i = 1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
char from = 'X', depend_on = 'Y', to = 'Z';
hanoi(n, from, depend_on, to);
}
public static void hanoi(int n, char from, char depend_on, char to) {
if (n == 1) {
move(n, from, to);
return;
} else {
hanoi(n - 1, from, to, depend_on);//X-----Y
move(n, from, to);//X-----Z
hanoi(n - 1, depend_on, from, to);//Y-----Z
}
}
public static void move(int n, char from, char to) {
System.out.println("第" + (i++) + "步:" + n + "号盘子" + from + "--------" + to);
}
}
java塔_Java-河内塔问题相关推荐
- C#之汉诺塔(河内塔)递归问题
C#之汉诺塔(河内塔)递归问题 前言 一.汉诺塔问题 二.问题思考 1.简单定义一下 2.假设简单的情况 3.推广 4.核心代码 总结 前言 小时候在直板手机上玩过这么一款叫做"汉诺塔&qu ...
- java优秀算法河内之塔_河内塔的Java程序
java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...
- 河内之塔java_java优秀算法河内之塔_河内塔的Java程序
java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...
- 汉诺塔(河内塔)算法与心得
问题:给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上.我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面. ...
- 汉诺塔(河内塔)问题
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...
- 河内之塔java_河内塔java实现
直接代码如下 /** * 河内之塔(Towers of Hanoi)是法国人 M.Claus(Lucas)于 1883 年从泰国带至法国的,河内为 越战时北越的首都,即现在的胡志明市:1883 年法国 ...
- 小知识系列(3):Hanoi塔(汉诺塔,河内塔)
同样,借此来强化学习,但是说实话我写这个感觉很玄.Hanoi塔是昨天刚学到的东西,想了很久,感觉还是没有悟透,可能学到更多新东西,或产生了新的想法,或突然悟到了什么,届时会再做修改. 看了很多关于Ha ...
- 汉诺塔(河内塔)问题解析(函数递归经典问题)
目录 1. 题目描述 2. 题目目标 3. 题目分析 1. 题目描述 在一块铜板装置上,有三根杆(编号A.B.C),在A杆自上而下.由大到下按顺序放置n个盘子. 2. 题目目标 把A杆上的盘子全部转移 ...
- python数据结构与算法 河内塔问题
#数据结构与算法之 递归应用 河内塔问题 ##河内塔问题 递归思路 :将 盘片 塔从 开始柱经由 中间柱 移动到 目标住: 首先将 上层N-1个盘片 从 开始柱 经由目标住 移动到中间柱: 然后就剩下 ...
- 递归之河内塔,汉诺塔问题(婆罗贺摩塔:Tower of Brahma)
THE TOWER OF HANOL :河内塔问题 河内塔问题是由法国数学家爱德华·卢卡斯于1883年发明的,给定一个由8个圆组成的塔,这些圆盘按照从大到小递减的方式套在三根桩柱中的一根上. 我们的目 ...
最新文章
- 均方根误差不超过_描述数值预报随机误差的利器:随机物理扰动组合方案
- Hutool之集合工具——CollectionUtil
- R语言ggplot2可视化将颜色图例和形状的图例组合成综合图例实战
- 来自社区的Visual Studio Code使用体验和教程
- 宣武区政务网教育网的改造
- Windows 7 应用程序崩溃恢复
- 企业要SD-WAN组网,请先评估这些问题
- 对Keil在线烧录程序弹出“The firmware of the connected J-Link[SN:xxxxxxxx] does not support......的问题解决
- 访问Webservice错误
- XVIII Open Cup named after E.V. Pankratiev. GP of Urals
- C#------如何判断输入的是否为纯数字
- labview在2048中添加时间滚动条_Chrome优化深色模式:滚动条颜色也能跟随变化 使上网更具沉浸感...
- 计算机代码如何求三角形面积,简单的程序来计算三角形的面积
- 没钱,就别玩大学这场游戏
- 【i.MX6ULL】驱动开发12——电容触摸驱动实践(上)
- 8uftp更改上传的网页内容
- 解决TypeError: conv2d() received an invalid combination of arguments
- 猫耳FM导出音频转换为音频格式(m4a/mp3)
- 地理数据库GeoNames,并导入Mysql
- 国内无代码开发平台功能对比