java算法1——河内之塔

  河内之塔游戏规则:有A、B、C三个石棒,A上有若干个从小到大依次排列的盘子,盘子的数量为n,现在要求,将A棒上的盘子依次移动到C棒上,并且移动过程中要保证小盘在大盘之上。
  (1)当n=1时:将盘子直接从A移动到C;( 注:图片来源于https://www.cnblogs.com/li-peng/p/3303349.html,图片有修改,原作者使用的是c和c++,感兴趣的读者可以去看一下)

图一

  (2)当n=2时:将小盘子1从A移动到B;
          将大盘子2从A移动到C;
          将小盘子1从B移动到C;
在这里插入图片描述

图二

  (3)当n=3时:将盘子1从A移动到C;
          将盘子2从A移动到B;
          将盘子1从C移动到B;
          将盘子3从A移动到C;
          将盘子1从B移动到A;
          将盘子2从B移动到C;
          将盘子1从A移动到C;
在这里插入图片描述

图三
   解题思路:当n=3时:(1)将1和2盘子看成一个盘子,利用图二就可完成盘子从A移动到C的移动操作;

           (2)A移动到C的过程中,先是把盘子1和2是看成一个盘子移动到B棒上的。那么就来看看这一部分怎么移动到B盘上的,将A和B棒位置互换,并且将A,B棒位置以及名字互换,再将更换后的B棒和C棒位置互换,那么通过图五,A棒便可以完成盘子1和2移动到B棒上。(递归思想)

在这里插入图片描述

图四 第(1)步移动

在这里插入图片描述

图五

  当n=n(多余三个的)时候,重复的将盘子分为最下边一个盘子分为第一部分,将剩下的所有上边的盘子分成第二部分,多次重复图二操作,便可以完成盘子从A移动到C的操作;

  代码和打印结果如下:

import java.util.Scanner;

public class Towers_of_Hanoi {
	
	public static void main(String[] args) {
		int n;
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入盘数:");
		if (scanner.hasNextInt()) {
            n = scanner.nextInt();
            data(n,"A","B","C");
        }else {
        	System.out.println("请输入正确数字");
        }
	}
	
	
	public static void data(int n,String A,String B,String C) {
		if(n==1) {
			System.out.println(A+">>"+C);
		}else {
			data(n-1,A,C,B);//第一步,将A上方所有的盘子,从A移动到B
			System.out.println(A+">>"+C);//第二步将A最后一个盘子,从A移动到C
			data(n-1,B,A,C);//第三步将B所有盘子,从B移动到C
		}
			
	}
}

打印结果1:
在这里插入图片描述

打印结果2:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值