河内之塔(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-河内塔问题相关推荐

  1. C#之汉诺塔(河内塔)递归问题

    C#之汉诺塔(河内塔)递归问题 前言 一.汉诺塔问题 二.问题思考 1.简单定义一下 2.假设简单的情况 3.推广 4.核心代码 总结 前言 小时候在直板手机上玩过这么一款叫做"汉诺塔&qu ...

  2. java优秀算法河内之塔_河内塔的Java程序

    java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...

  3. 河内之塔java_java优秀算法河内之塔_河内塔的Java程序

    java优秀算法河内之塔 Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objec ...

  4. 汉诺塔(河内塔)算法与心得

    问题:给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上.我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面. ...

  5. 汉诺塔(河内塔)问题

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...

  6. 河内之塔java_河内塔java实现

    直接代码如下 /** * 河内之塔(Towers of Hanoi)是法国人 M.Claus(Lucas)于 1883 年从泰国带至法国的,河内为 越战时北越的首都,即现在的胡志明市:1883 年法国 ...

  7. 小知识系列(3):Hanoi塔(汉诺塔,河内塔)

    同样,借此来强化学习,但是说实话我写这个感觉很玄.Hanoi塔是昨天刚学到的东西,想了很久,感觉还是没有悟透,可能学到更多新东西,或产生了新的想法,或突然悟到了什么,届时会再做修改. 看了很多关于Ha ...

  8. 汉诺塔(河内塔)问题解析(函数递归经典问题)

    目录 1. 题目描述 2. 题目目标 3. 题目分析 1. 题目描述 在一块铜板装置上,有三根杆(编号A.B.C),在A杆自上而下.由大到下按顺序放置n个盘子. 2. 题目目标 把A杆上的盘子全部转移 ...

  9. python数据结构与算法 河内塔问题

    #数据结构与算法之 递归应用 河内塔问题 ##河内塔问题 递归思路 :将 盘片 塔从 开始柱经由 中间柱 移动到 目标住: 首先将 上层N-1个盘片 从 开始柱 经由目标住 移动到中间柱: 然后就剩下 ...

  10. 递归之河内塔,汉诺塔问题(婆罗贺摩塔:Tower of Brahma)

    THE TOWER OF HANOL :河内塔问题 河内塔问题是由法国数学家爱德华·卢卡斯于1883年发明的,给定一个由8个圆组成的塔,这些圆盘按照从大到小递减的方式套在三根桩柱中的一根上. 我们的目 ...

最新文章

  1. 均方根误差不超过_描述数值预报随机误差的利器:随机物理扰动组合方案
  2. Hutool之集合工具——CollectionUtil
  3. R语言ggplot2可视化将颜色图例和形状的图例组合成综合图例实战
  4. 来自社区的Visual Studio Code使用体验和教程
  5. 宣武区政务网教育网的改造
  6. Windows 7 应用程序崩溃恢复
  7. 企业要SD-WAN组网,请先评估这些问题
  8. 对Keil在线烧录程序弹出“The firmware of the connected J-Link[SN:xxxxxxxx] does not support......的问题解决
  9. 访问Webservice错误
  10. XVIII Open Cup named after E.V. Pankratiev. GP of Urals
  11. C#------如何判断输入的是否为纯数字
  12. labview在2048中添加时间滚动条_Chrome优化深色模式:滚动条颜色也能跟随变化 使上网更具沉浸感...
  13. 计算机代码如何求三角形面积,简单的程序来计算三角形的面积
  14. 没钱,就别玩大学这场游戏
  15. 【i.MX6ULL】驱动开发12——电容触摸驱动实践(上)
  16. 8uftp更改上传的网页内容
  17. 解决TypeError: conv2d() received an invalid combination of arguments
  18. 猫耳FM导出音频转换为音频格式(m4a/mp3)
  19. 地理数据库GeoNames,并导入Mysql
  20. 国内无代码开发平台功能对比

热门文章

  1. 别再用智能合约时代的思维,去思考下一代区块链应用
  2. php伪静态设置,phpstudy伪静态设置
  3. 百度编辑器-Ueditor
  4. 猫扑产品总监聊聊运营环节的6大硬伤
  5. stm32 串口输出 中文乱码
  6. xen虚拟windows使用vnc桌面鼠标位置偏移现象的解决
  7. Userdata 分区 resize 功能
  8. 微信和QQ这么多群,该如何管理好友关系?
  9. python字符串强制转换购物练习
  10. unsqueeze(),squeeze(),unsqueeze_()的使用