其他分享
首页 > 其他分享> > 汉诺塔游戏

汉诺塔游戏

作者:互联网

汉诺塔游戏

游戏简介

如图:游戏开始时应该有三条柱子,而我们需要做的就是把A柱子上的所有原盘转移到另一个指定的柱子C上,在此过程中原盘需要满足小原盘在大圆盘的上面。
在这里插入图片描述

实例

如图,此时需要把A柱上的所有原盘放到C上的步骤依次应该为:
A->C
A->B
C->B
A->C
B->A
B->C
A->C
在这里插入图片描述

代码思路

实例1:n=1时,A->C

实例2:n=2时,A->B,A->C,B->C

实例3:n=3时,A->C,A->B,C->B,A->C,B->A,B->C,A->C

如上例,当A柱上有n个盘子时,我们需要把这n-1个盘子通过C柱挪到B柱上,再把A柱上最大的那个盘子挪到C上,然后把B柱上这n-1个盘子通过A挪到C上,此时把n-1看成新的n,B柱就是新的A柱,把B柱上的n-1个盘子通过A柱挪到C上,也就是把新A柱上的新n个盘子通过新B柱挪到C上。
如图:
在这里插入图片描述
则在n>1时,所有的操作可以看成3步
把n个盘子从A通过B挪到C;目的
只需要把n-1个盘子从A通过C挪到B; 第一步
A上剩余的最后一个盘子再挪到C; 第二步
然后把这n-1个盘子从B通过A挪到C; 第三步,此时与刚开始一样,重复操作(此时只是目的的n变成了现在的n-1,从A通过B变成了现在的从B通过A,所以只需要修改n的值,再将A、B柱子的名字互换继续循环执行即可,知道n为1时。再直接挪到C柱即可)

代码

public class Hanoi {
    public static void move(char x,char y){
        System.out.println(x + "->" + y);
    }
    public static void func(int n,char pos1,char pos2 ,char pos3){
        if (n == 1){
            move(pos1,pos3);
            return;
        }
        func(n - 1,pos1,pos3,pos2);
        move(pos1,pos3);
        func(n - 1,pos2,pos3,pos1);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入A柱上的原盘数");
        int n = sc.nextInt();
        func( n , 'A','B','C');
    }
}

测试截图

实例1:
在这里插入图片描述

实例2:
在这里插入图片描述

实例3:
在这里插入图片描述

标签:游戏,挪到,char,实例,汉诺塔,盘子,柱上,pos3
来源: https://blog.csdn.net/weixin_52793965/article/details/116274562