【C++题解】1222. 经典递归问题——汉诺塔

news2024/9/25 1:21:21

欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》

问题:1222. 经典递归问题——汉诺塔

类型:递归、函数


题目描述:

汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着 64 个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。

面对庞大的数字(移动圆片的次数) 18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。

在这里插入图片描述

后来,这个传说就演变为汉诺塔游戏:

有三根杆子 A,B,C 。A杆上有若干碟子。

每次移动一块碟子,小的只能叠在大的上面。

把所有碟子从 A 杆全部移到 C杆上。

经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:

如 3 阶汉诺塔的移动:

A→C,A→B,C→B,A→C,B→A,B→C,A→C。

此外,汉诺塔问题也是程序设计中的经典递归问题。

算法思路:

如果只有一个金片,则把该金片从源移动到目标棒,结束。

如果有 n 个金片,则把前 n−1 个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前 n−1 个移动到目标棒。

输入:

一个整数 N ,表示 A 柱上有 N 个碟子。(0<n≤10)

输出:

若干行,即移动的最少步骤。

样例:

输入:

3

输出:

A To C
A To B
C To B
A To C
B To A
B To C
A To C

在这里插入图片描述
在这里插入图片描述


完整代码如下:

#include<bits/stdc++.h>
using namespace std;
void hanoi(int h,char start,char temp,char end){
	if(h==1){
		cout<<start<<" To "<<end<<endl;
	}else{
		hanoi(h-1,start,end,temp);
		cout<<start<<" To "<<end<<endl;
		hanoi(h-1,temp,start,end);
	}
}
int main(){
	//一、分析问题
	//已知:
	//未知:
	//关系:
	//二、定义变量(已知、未知、关系) 
	int n;
	//三、输入已知
	cin>>n;
	//四、根据关系计算
	hanoi(n,'A','B','C');
	//五、输出未知 
	
	
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于武汉芯景科技有限公司的MCU监控芯片XJ809S开发指南(兼容MAX809S)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、功能 当电源电压低于预设阈值时&#xff0c;芯片会发出复位信号&#xff0c;将微处理器或系统重置到初始状态&#xff0c;防止因电源问题导致的系统错误运行。复位信号在电源电压恢复并稳定后至少保持140ms&#xff0c;确保系统有…

HikariCP源码分析之源码环境搭建

一、fork源码库 为了方便记录以及查看一些历史的提交信息&#xff0c;我先在github上fork了这个源码库。 他的原始源码库位置为HikariCP源码位置 在fork到我的源码库之后&#xff0c;我就可以用git clone拉取下来&#xff0c;然后在我本地打开&#xff0c;做一些修改和笔记。然…

点云上采样

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章&#xff0c;专栏介绍地址“【python三维深度学习】python…

mysql regexp匹配多个字符串

项目场景&#xff1a; 数据结构 其中nameArr存储的是名字集合&#xff0c;现在的需求是传入"aaa","fff"&#xff0c;需要把包含这两个name的数据都查出来。 解决方案&#xff1a; 可以使用REGEXP来匹配包含多个特定ID的字符串。使用以下正则表达式&#x…

Linux1-初识Linux

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、硬件和软件 我们所熟知的计算机是由&#xff1a;硬件和软件所组成。 硬件&#xff1a;计算机系统中由电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。 软件&#xff1a;是用户和…

复习Vue笔记(给自己做笔记)

基于脚手架创建前端工程 环境要求 node.js&#xff1a;前端项目的运行环境&#xff08;相当于Java的运行环境JDK&#xff09; npm&#xff1a;JS的包管理工具/器 Vue CLI&#xff1a;基于Vue进行快速开发的完整系统&#xff0c;实现交互式的项目脚手架 创建Vue基础项目代码&a…

从入门到专业,2024年精选录屏工具一网打尽

电脑录屏随着科技的飞速发展和数字化生活的普及已经成为了我们学习、日常工作、娱乐中不可或缺的一部分。本文将带你一起探索和班迪录屏一样大火的电脑录屏工具有哪些。 1.福昕REC大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款软件体积小巧精致&#xff0c;不需要多…

【第81课】开发框架安全SpringBootStruts2LaravelThinkPHPCVE复现

免责声明 本文发布的工具和脚本&#xff0c;仅用作测试和学习研究&#xff0c;禁止用于商业用途&#xff0c;不能保证其合法性&#xff0c;准确性&#xff0c;完整性和有效性&#xff0c;请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0…

Golang | Leetcode Golang题解之第376摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

【JVM】剖析字符串与数组的底层实现(二)

剖析字符串与数组的底层实现 字符串jdk8和jdk9的区别 jdk8:底层是一个char[]数组 jdk9及之后:底层是一个byte[]数组 一个中文占两个字节&#xff0c;一个char占两个字节&#xff0c;一个byte占一个字节 Jdk9及之后的版本中&#xff0c;多了一个code属性&#xff0c;这个属性标…

深入掌握Kubernetes核心:YAML配置详解与实战

Kubernetes 的yaml配置文件 Kubernetes 的 YAML 配置文件是定义和管理集群中的所有资源的关键工具。了解如何编写和使用这些配置文件对管理 Kubernetes 集群至关重要。 1. 基础结构 Kubernetes YAML 配置文件通常由以下几个部分组成&#xff1a; apiVersion: 资源使用的 API …

公司同时使用目标(OKR)(KPI)的用例是什么?

简单的答案&#xff1a;所有使用OKR的公司都使用KPI。 长答案&#xff1a; 在公司层面&#xff0c;大多数OKR与关键绩效指标直接挂钩。举例说明&#xff0c;假设一家公司的目标是&#xff1a;”实现财务目标”&#xff0c;有以下3个关键结果。 1-第二季度公司收入翻番&#…

BeanFactoryPostProcessor 和 BeanPostProcessor

BeanFactoryPostProcessor 和 BeanPostProcessor 基本概念BeanFactoryPostProcessor简单实践BeanFactoryPostProcessor 典型应用BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor BeanPostProcessor简单实践AOP 简单实践 基本概念 BeanFactoryPostProcessor …

百度翻译与TOP3在线翻译伙伴:2024年的黄金组合

在这个信息丰富的时代&#xff0c;语言帮助人们跨越地域界限进行交流。随着全球化的发展&#xff0c;高效的在线翻译工具变得越来越重要&#xff0c;它能帮我们更好地了解世界和不同的文化。今天&#xff0c;我们就来看看百度翻译和它的三个新对手之间的比较&#xff0c;一起找…

redis作为缓存,mysql的数据如何与redis同步

先介绍自己的业务背景&#xff0c;是一致性要求高的 还是 允许延迟一致&#xff0c;因为两者的回答不一样。 双写一致性 双写一致性:当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致。 读操作:缓存命中&#xff0c;直接返回;缓存未命中…

动⼿学深度学习

大家如果想获取这个PDF可以关注&#xff0c;收藏点赞并私信我&#xff0c;我把这个PDF文档发给感兴趣的朋友 目录 预备知识 预备知识内容 线性神经网络 线性回归 基本元素 矢量化加速 正态分布与平方损失 从线性回归到深度网络 小结与练习 线性回归的实现 从零开始实现…

safari扩展程序开发

文章目录 safari_web_extensions开发扩展扩展有3个主要部分&#xff1a;使用 WebExtension APIruntime local debugSafari中允许运行 未签名的扩展install extensionupdate extension publish safari的extension文档不是很好&#xff0c;建议参考mozilla文档 https://developer…

【Python零基础】类的概念

文章目录 前言一、创建并使用类二、使用类和实例三、继承四、导入类五、Python标准库六、类的编码风格总结 前言 面向对象编程是现在使用最多的软件编写方法之一。面向对象中最核心的就是类(class)&#xff0c;类用来描述现实世界的事物和情景&#xff0c;我们基于这些类来创建…

信号的产生

文章目录 2 信号的产生2.1 键盘组合键2.2 命令和函数调用2.2.1 kill命令2.2.2 raise()函数2.2.3 abort()函数 2.3 硬件异常2.3.1 除0异常2.3.2 空指针异常2.3.3 OS如何感知这些异常--除0异常2.3.4 OS如何感知这些异常--空指针异常 2.4 软件条件2.4.1 13&#xff09;SIGPIPE信号…

yolov5关键点检测-实现溺水检测与警报提示(代码+原理)

基于YOLOv5的关键点检测应用于溺水检测与警报提示是一种结合深度学习与计算机视觉技术的安全监控解决方案。该项目通常会利用YOLOv5强大的实时目标检测能力&#xff0c;并通过扩展或修改网络结构以支持人体关键点检测&#xff0c;来识别游泳池或其他水域中人们的行为姿态。 项…