当前位置:首页 > 通信资讯 > 正文

汉诺塔java编程讲解(Java汉诺塔)

汉诺塔简介:

汉诺塔java编程讲解(Java汉诺塔)

我们想要实现的是 让 a柱上的盘子,移动到c柱上

1层汉诺塔

汉诺塔java编程讲解(Java汉诺塔)

2层汉诺塔

汉诺塔java编程讲解(Java汉诺塔)

3层汉诺塔详解图

汉诺塔java编程讲解(Java汉诺塔)

第一步

汉诺塔java编程讲解(Java汉诺塔)

第二步

汉诺塔java编程讲解(Java汉诺塔)

第三步

汉诺塔java编程讲解(Java汉诺塔)

第四步

汉诺塔java编程讲解(Java汉诺塔)

第五步

汉诺塔java编程讲解(Java汉诺塔)

第六步

汉诺塔java编程讲解(Java汉诺塔)

第七步

汉诺塔java编程讲解(Java汉诺塔)

经过上面的图解,相比大家一定在一定程度了解到汉诺塔的游戏规则,以及怎么去玩。

总之 最终c柱上第一个盘子,是最大,最顶的是最小的,而且在操作过程中,前几步就是为了让三个柱子中最大的盘子移动到c柱上,
然后不断,将它两个柱子中最大盘子往上累加,(盘子从大到小,从下往上摆放)

而且盘子一多,你就会发现过程中间,除了最大的盘子,其余的盘子都会集中在 b柱上,这样才能把 a 柱上最底下也是最大的盘子,移动到c上。
这是规律一

还有一个规律,在最大的盘子移动c柱上之后,第二个大的盘子要放在a柱上,其余盘子按照规则全部放在b柱上,
这样第二大的盘子才能移动到最大的盘子上

说白了,盘子再多,也要按照上面两个规律,才能完成整个游戏

那我把最大盘子上面的所有盘子看成一个整体,放在b柱上,最大盘子移动到c柱上,把b柱上盘子直接盖上去,不就行了,反正也就是重复那两个规律而已

汉诺塔java编程讲解(Java汉诺塔)

程序如下

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 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层汉诺塔的输出结果附图(可以返回去看看,对一对)

汉诺塔java编程讲解(Java汉诺塔)

有什么疑问,可以在下方讨论,切记 不要自己带入一个特别大数字去展开,带入一个 1 ~3 ,了解规律就行。不主张展开,主张掌握规律(递推公式)。

本文结束。

以上就是java 实现一个汉诺塔实战练习的详细内容,更多关于java 汉诺塔的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/DarkAndGrey/article/details/120924413

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。