java算法1——河内之塔

2023-05-16

  河内之塔游戏规则:有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:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java算法1——河内之塔 的相关文章

  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • Cassandra java驱动程序协议版本和连接限制不匹配

    我使用的java驱动程序版本 2 1 4卡桑德拉版本 dsc cassandra 2 1 10cql 的输出给出以下内容 cqlsh 5 0 1 Cassandra 2 1 10 CQL spec 3 2 1 Native protocol
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • Mybatis-Plus-Generator源码解读

    首先 xff0c 从AutoGenerator类的execute方法进入 生成代码 public void execute logger debug 34 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Xfce+VNC+XRDP实现远程桌面连接的方法

    本文介绍在CentOS 7 3下安装Xfce 43 VNC 43 XRDP实现远程桌面连接的方法 xff0c 使用root用户进行操作 1 配置前准备 升级更新 xff08 可选 xff09 更新资源 xff0c 避免资源过旧出现问题 yu
  • 视频超分——02 VESPCN

    Real Time Video Super Resolution with Spatio Temporal Networks and Motion Compensation 参考资料 xff1a 论文内容 xff1a https blog
  • 002 在树莓派zero w上安装 VNC

    前言 有时直接在树莓派上工作并不方便 也许您想通过远程控制从另一台设备进行处理 VNC 是一个图形桌面共享系统 xff0c 允许您从另一台计算机或移动设备 xff08 运行 VNC 查看器 xff09 远程控制一台计算机 xff08 运行
  • SRFBN阅读笔记

    文章出自cvpr2019 全称 xff1a Feedback Network for Image Super ResolutionFB层的两个输入 xff08 规定F out 1是F in 0 xff09 先做concatenate xff
  • 升级cmake到3.6.2

    CMake 到 3 6 2 https cmake org download CentOS 7 span class token punctuation span root 64 thrift1 span class token punct
  • dpkg强制卸载

    dpkg的一个强制卸载的方法 安mysql的时候因为玄学国家防火墙 xff0c 安到一般被阻断了 xff0c 再卸的时候各种依赖不对 xff0c dpkg r P怎么都卸不掉 xff0c 提示有依赖卸载包的东西 xff0c 找到一个 for
  • Python打包(构建)、分发、安装 简要介绍

    1 为什么要打包分发 平时我们习惯了使用pip安装一些package xff0c 但是如果想自己写一些package供别人使用 xff0c 就需要打包分发 打包 xff08 构建 xff09 xff1a 将自己的源代码打包封装成packag
  • 树莓派3b安装nginx 2018.12.31

    sudo apt get update sudo apt get upgrade sudo apt get remove apache2 据说如果系统自带apache2的话 xff0c apache2会占用80端口 xff0c 导致影响ng
  • 双系统:解决ubuntu18.04系统开机黑屏的问题(ubuntu20.04,ubuntu16.04适用)

    安装ubuntu双系统 xff1a 点击第三个U盘安装方式 xff1a 安装ubuntu xff1a 会出现黑屏现象 xff1a 重启电脑 xff08 一般是长按开机键 xff09 xff0c 在下面这个界面按e xff0c 注意不是回车是
  • WSL 下 Ubuntu 20.04 中文显示设置

    环境 系统 xff1a Windows 10 Pro 64 子系统 xff1a Ubuntu 20 04 LTS 查看本地语言包 xff0c 安装语言包 locale a 查看现有语言包 span class token function
  • linux网络测试工具

    工具 iperf 网络性能测试工具 测试组播 xff1a iperf s u B lt 组播地址 gt i lt 结果显示间隔 gt iperf s u B 231 1 2 1 i 1 iperf c lt 组播地址 gt u T lt T
  • python检查一个变量的类型

    1 只想知道某个变量的数据类型 xff1a python中判断一个变量的数据类型可以用 type 变量名 函数 xff1a gt gt gt rectangle 61 200 50 gt gt gt type rectangle lt cl
  • Windows10中wsl2安装kali子系统加GUI

    环境 win10专业工作站 操作 确定后重启 配置先决条件 In Windows Powershell 管理员 Enable WindowsOptionalFeature Online FeatureName Microsoft Windo
  • vue项目中使用ramda库

    先安装ramda库 npm i ramda 在main js中引入 import as R from 39 ramda 39 Vue prototype R 61 R
  • Get请求体中转义字符及URI编码

    参考 xff1a 转义字符及URI编码 weixin 30678349的博客 CSDN博客 获取职级类型的列表 getRankTypeList var sql 61 96 select COMMENTS from user col comm
  • 使用jar命令替换jar|war包中指定文件

    一 jar命令用法 span class token operator span c 创建新的归档文件 span class token operator span t 列出归档目录和文件 span class token operator
  • Windows编程UTF-8,UTF-16,ASCII,宽字节,窄字节等编码问题汇总

    宽字节输出乱码问题 span class token macro property span class token directive hash span span class token expression Unicode 字符集 s
  • 前端基础--NPM包管理工具

    NPM包管理工具 关键字 xff1a NPM包资源管理器 pdf 提示 xff1a 经常使用的命令 xff0c 一些生产常见问题记录 文章目录 NPM包管理工具一 常用命令 一 常用命令 span class token number 1
  • java算法1——河内之塔

    河内之塔游戏规则 xff1a 有A B C三个石棒 xff0c A上有若干个从小到大依次排列的盘子 xff0c 盘子的数量为n xff0c 现在要求 xff0c 将A棒上的盘子依次移动到C棒上 xff0c 并且移动过程中要保证小盘在大盘之上