Java 实现一个汉诺塔实战练习

网友投稿 258 2022-11-29

Java 实现一个汉诺塔实战练习

汉诺塔简介:

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

1层汉诺塔

2层汉诺塔

3层汉诺塔详解图

第一步

第二步

第三步

第四步

第五步

第六步

第七步

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

总之 最终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)UnYdmlj;

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 ,了解规律就行。不主张展开,主张掌握规律(递推公式)。

本文结束。

以上就是Java 实现一个汉诺塔实战练习的详细内容,更多关于Java 汉诺塔的资料请关注我们其它UnYdmlj相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[leetcode] 740. Delete and Earn
下一篇:[leetcode] 1625. Lexicographically Smallest String After Applying Operations
相关文章

 发表评论

暂时没有评论,来抢沙发吧~