Java 实现一个汉诺塔实战练习
作者:Dark And Grey 时间:2021-12-20 14:49:47
汉诺塔简介:
我们想要实现的是 让 A柱上的盘子,移动到C柱上
1层汉诺塔
2层汉诺塔
3层汉诺塔详解图
第一步
第二步
第三步
第四步
第五步
第六步
第七步
经过上面的图解,相比大家一定在一定程度了解到汉诺塔的游戏规则,以及怎么去玩。
总之 最终C柱上第一个盘子,是最大,最顶的是最小的,而且在操作过程中,前几步就是为了让三个柱子中最大的盘子移动到C柱上,
然后不断,将它两个柱子中最大盘子往上累加,(盘子从大到小,从下往上摆放)
而且盘子一多,你就会发现过程中间,除了最大的盘子,其余的盘子都会集中在 B柱上,这样才能把 A 柱上最底下也是最大的盘子,移动到C上。
这是规律一
还有一个规律,在最大的盘子移动C柱上之后,第二个大的盘子要放在A柱上,其余盘子按照规则全部放在B柱上,
这样第二大的盘子才能移动到最大的盘子上
说白了,盘子再多,也要按照上面两个规律,才能完成整个游戏
那我把最大盘子上面的所有盘子看成一个整体,放在B柱上,最大盘子移动到C柱上,把B柱上盘子直接盖上去,不就行了,反正也就是重复那两个规律而已
程序如下
import java.util.Scanner;
public class Manuscript {
static int times;// 移动次数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char A = 'A';
char B = 'B';
char C = 'C';
int n = scanner.nextInt();
game(n,A,B,C);
scanner.close();
}
public static void move(int disk,char M,char N){
System.out.println("第"+(++times)+"次移动,盘子"+disk+" "+M +"---->"+N);
}
public static void game(int n,char A,char B,char C){
if(n==1){
move(n,A,C);// 把A柱目前最大盘子放在C柱上,第一次肯定最大的那个
}else{
// 将 n-1 个 盘子 放到B柱子,注意ABC位置,再看看下面 move(n,A,C);,细细琢磨
game(n-1,A,C,B);// A B(C) C(B)
move(n,A,C);
// 把n-1 个盘子 放在C上,注意ACB位置
game(n-1,B,A,C);// A(B) B(A) C
}
}
}
3层汉诺塔的输出结果附图(可以返回去看看,对一对)
有什么疑问,可以在下方讨论,切记 不要自己带入一个特别大数字去展开,带入一个 1 ~3 ,了解规律就行。不主张展开,主张掌握规律(递推公式)。
本文结束。
来源:https://blog.csdn.net/DarkAndGrey/article/details/120924413
标签:Java,汉诺塔,实战
0
投稿
猜你喜欢
java实体类转成map的实现
2022-03-25 08:56:04
Mybatis TypeHandler接口及继承关系示例解析
2021-11-19 03:33:34
mybatis in foreach 双层嵌套问题
2023-11-24 12:55:47
Android自定义荷载进度的两种方法
2022-08-29 03:21:39
Android客户端与服务端数据加密传输方案详解
2023-07-14 13:55:37
C#中流的使用和分类
2022-10-04 22:17:41
深入理解java动态代理的两种实现方式(JDK/Cglib)
2023-11-26 13:29:52
常用类之TCP连接类-socket编程
2021-08-03 16:46:25
Java Lambda表达式常用的函数式接口
2021-10-30 13:43:53
C#之IP地址和整数互转的小例子
2023-11-21 05:49:19
复杂JSON字符串转换为Java嵌套对象的实现
2023-07-02 05:40:26
Android View与Compose互相调用实例探究
2021-06-11 09:07:29
C# 利用代理爬虫网页的实现方法
2023-02-26 18:51:43
一看就懂的Android APP开发入门教程
2023-07-18 04:10:41
Java List分页功能实现代码实例
2022-06-02 13:56:14
详解OpenCV For Java环境搭建与功能演示
2023-05-27 09:13:50
详解Mybatis框架SQL防注入指南
2023-09-16 02:49:02
Java字符串操作和C#字符串操作的不同小结
2022-02-15 07:21:14
Java EE项目中的异常处理总结(一篇不得不看的文章)
2023-06-16 23:35:26
JAVA设置手动提交事务,回滚事务,提交事务的操作
2022-07-20 08:07:40