汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
import java.math.BigInteger;
/*
* 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上(可以借助第三根柱子做缓冲)。
并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
如图【1.jpg】是现代“山寨”版的该玩具。64个圆盘太多了,所以减为7个,
金刚石和黄金都以木头代替了......但道理是相同的。
据说完成大梵天的命令需要太多的移动次数,以至被认为完成之时就是世界末日!
你的任务是精确计算出到底需要移动多少次。
很明显,如果只有2个圆盘,需要移动3次。
圆盘数为3,则需要移动7次。
那么64个呢?
答案写在“解答.txt”中,不要写在这里!
*/
class Demo07_hanoi {
public static void hanoi(int n,char a,char b,char c){
if(n>0){
hanoi(n-1,a,c,b);
//System.out.println(a+"->"+b);
hanoi(n-1,c,b,a);
s++;
}
}
static long s = 0;
public static void main(String[] args){
int n = 10;
System.out.println("圆盘个数\t移动次数");
for(int i=1;i<=n;i++){
s = 0;
hanoi(i,'a','b','c');
System.out.println(i+" ->\t"+s);
}
System.out.println("由上结果可找到规律为:\n移动次数 = 2的n次方-1(n为圆盘个数)");
System.out.println("64个圆盘的移动次数为:");
BigInteger bi = new BigInteger("2");
bi = bi.pow(64).subtract(BigInteger.ONE);
System.out.println(bi);
}
}
运行结果:
圆盘个数 移动次数
1 -> 1
2 -> 3
3 -> 7
4 -> 15
5 -> 31
6 -> 63
7 -> 127
8 -> 255
9 -> 511
10 -> 1023
由上结果可找到规律为:
移动次数 = 2的n次方-1(n为圆盘个数)
64个圆盘的移动次数为:
18446744073709551615
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。相关推荐
- * 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。java
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上(可以借助第三根柱子做缓冲). 并且规定, ...
- 汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺
import java.awt.*; import java.awt.event.*; public class hanota extends Frame implements ActionListe ...
- 汉诺塔(河内塔)问题
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...
- C#之汉诺塔(河内塔)递归问题
C#之汉诺塔(河内塔)递归问题 前言 一.汉诺塔问题 二.问题思考 1.简单定义一下 2.假设简单的情况 3.推广 4.核心代码 总结 前言 小时候在直板手机上玩过这么一款叫做"汉诺塔&qu ...
- PTA汉诺(Hanoi)塔问题
PTA汉诺(Hanoi)塔问题 古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动 ...
- 小知识系列(3):Hanoi塔(汉诺塔,河内塔)
同样,借此来强化学习,但是说实话我写这个感觉很玄.Hanoi塔是昨天刚学到的东西,想了很久,感觉还是没有悟透,可能学到更多新东西,或产生了新的想法,或突然悟到了什么,届时会再做修改. 看了很多关于Ha ...
- 汉诺塔(河内塔)问题解析(函数递归经典问题)
目录 1. 题目描述 2. 题目目标 3. 题目分析 1. 题目描述 在一块铜板装置上,有三根杆(编号A.B.C),在A杆自上而下.由大到下按顺序放置n个盘子. 2. 题目目标 把A杆上的盘子全部转移 ...
- 汉诺塔(河内塔)算法与心得
问题:给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上.我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面. ...
- 汉诺(Hanoi)塔问题
用C语言解决(Hanoi)汉诺塔问题 首先,我们先给出(Hanoi)汉诺塔问题: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A ...
最新文章
- 机器学习中常用到的知识点总结
- No 'Access-Control-Allow-Origin' header is present on the requested resource.
- 请检查网站服务器是否正常.,网站访问不了?如何做自我检查?
- SwitchHosts-win32-x64
- C/C++ 中变量的声明、定义、初始化的区别
- (转)JSP基础精华
- adb remount overlayfs的说明
- IAR 的精确延时程序(转)
- SpringBoot→整合数据层、@Valid参数校验、事务propagation属性、动态SQL、AOP监控执行时间
- Python Numpy模块函数np.c_和np.r_学习使用
- 对计算机病毒的防治也,对计算机病毒及防范对策研究.doc
- 使用certbot在nginx搭建HTTPS 以及 阿里云负载均衡HTTPS搭建
- 微信支付证书如何部署在linux,微信支付平台证书更新指引
- (32)【文件下载漏洞专题】Filedownload原理、漏洞出现、危害、漏洞利用……
- 某zhan sign
- 大一大学计算机论文摘要,大学计算机基础小论文
- 学习百度Apollo中的决策规划
- Acwing 游戏时间 C++ python
- [汇编语言][bx]和loop指令
- Microsoft Platform SDK Febrary 2003下载(更新VC6的SDK)