使用Java实现汉诺塔问题~

news/2025/2/4 0:55:52/

我们设A为起始柱子,B为辅助柱子,C为目标柱子

由于盘子只能是大的放在下面,小的放在上面,因此,我们需要先将A柱子除了最下层的盘子都移动至B柱子

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如下所示完成了最下层柱子到达它的最终位置,接下来,我们需要将B柱子上除了最下层的盘子之外的盘子移动至A,重复上述步骤

在这里插入图片描述

每次变化的点有两个:

1:柱子的功能

默认条件下,我们设置A为初始柱子,B为辅助柱子,C为目标柱子

设圆盘的个数为n

那么第一次我们需要将A柱子上的n-1个盘子借助C按照大小移动至B,由此B成为目标柱子,C为辅助柱子,当最下层的柱子到达C后,第一次完成(A为空柱子,B有n-1个盘子,C有1个盘子

那么第二次我们需要将B柱子上的n-1-1个盘子借助A按照大小移动至C,由此C成为目标柱子,A为辅助柱子,当最下层的柱子到达C后,第二次完成(A有n-1-1个盘子,B为空柱子,C有2个盘子

我们可以将除了最下层之外的n-1个圆盘看作一个整体,其实也就是2个盘子移动的问题,内部就是一个不断递归的过程

2:圆盘的数量

需要移动的圆盘的数量每次完成之后-1,而到达最终位置的圆盘数量每次完成之后+1

实现:

import java.util.Scanner;public class test10 {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("请输入圆盘的数量");int num = in.nextInt();hanoi(num, 'A', 'B', 'C');//起始柱、辅助柱、目标柱默认为A、B、C}public static void hanoi(int num, char a, char b, char c){if (num == 1) {System.out.println("第" + num + "个圆盘从" + a + " -> " + c);}else{//每当有一个盘子到达最终位置,目标柱和起始柱就要发生变化hanoi(num - 1, a, c, b);System.out.println("第" + num + "个圆盘从" + a + " -> " + c);hanoi(num - 1, b, a, c);}}}
请输入圆盘的数量
31个圆盘从A -> C2个圆盘从A -> B1个圆盘从C -> B3个圆盘从A -> C1个圆盘从B -> A2个圆盘从B -> C1个圆盘从A -> C

http://www.ppmy.cn/news/1172001.html

相关文章

【大数据 - Doris 实践】数据表的基本使用(四):动态分区

数据表的基本使用(四):动态分区 1.原理2.使用方式3.动态分区规则参数3.1 主要参数3.2 创建历史分区的参数3.3 创建历史分区规则3.4 创建历史分区举例3.5 注意事项 4.示例4.1 创建动态分区表4.2 查看动态分区表调度情况4.3 查看表的分区4.4 插…

ES(elasticsearch) - kibana导出csv

前言 主要记录使用Kibana导出查询结果的csv文件,以及相关的导出配置 1.条件过滤 Discover -> 选择索引模式 -> 选择要显示字段 -> 输入你的查询条件 -> 选择时间范围 -> 点击保存 2.下载 management> Kibana > Reporting 中下载 3.常见问题…

小白也会的校园网宽带拨号自动重连设置

开始菜单搜索“任务计划程序”:我这个开始菜单和你们的不太一样,用了StartAllBack设置的,总之能找到这个程序就行了 提示:可以按下“Win R”,打开“运行”,输入taskschd.msc来打开任务计划程序 点击“任务…

提高查询性能的秘密:深入剖析聚集、辅助、覆盖和联合索引

文章目录 🍊 聚集索引🍊 辅助索引🍊 覆盖索引🎉 覆盖索引是什么?🎉 什么情况下优化器会选择使用覆盖索引?📝 1. 查询操作只需要用到辅助索引中的字段📝 2. 进行统计操作时…

【LittleXi】地址空间三题

【LittleXi】地址空间三题 问题 给定这个结构体 struct {bool s;short b;const char *str "AABB";int i; } a[2];计算这三个输出 printf("%d\n", (char *)(&(a[0].i)) - (char *)(&(a[0].s))); printf("%x\n", (&(a[1].i)) - (…

订水商城H5实战教程-02系统登录

目录 1 创建数据源2 创建自定义应用3 创建全局变量4 实现登录功能5 控制弹窗是否显示6 最终的效果 上一篇我们分析了订水商城的功能,功能分析好了之后,就需要开发功能。用户登录商城的第一步就是进行登录,登录的时候需要同意用户协议&#xf…

Arduion 驱动 ADXL335三轴加速度计模块

Arduion 驱动 ADXL335三轴加速度计模块 简介电气参数原理图接线代码实验结果 简介 ADXL335是一个小,薄,低功率,完整的三轴加速度计,具有信号调节电压输出。该产品测量加速度的最小全尺度范围为3 g。它可以测量倾斜传感应用中重力…

QCC 音频输入输出

QCC 音频输入输出 QCC蓝牙芯片(QCC3040 QCC3083 QCC3084 QCC5181 等等)支持DAC、I2S、SPDIF输出,AUX、I2S、SPDIF、A2DP 输入 蓝牙音频输入,模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 输入方式切换参考 sta…