问题解决:【OJ1547】汉诺塔游戏

递归经典例题:汉诺塔问题 问题描述 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作? ———————————————— 版权声明:本文为优快云博主「qq1024734546」的原创文章,遵循CC 4.0 BY-SA版权协议,. 阅读详情

题目描述:

汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始它们都叠在A塔上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。

1494807383983155580.jpeg

游戏中的每一步规则如下:

1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方)

2. 移动的过程中,你必须保证大的盘子不能在小的盘子上方(小的可以放在大的上面,最大盘子下面不能有任何其他大小的盘子)

如对于n=3的情况,一个合法的移动序列式:

1 from A to C //即把编号为1的盘子从a柱移至c柱

2 from A to B //即把编号为2的盘子从a柱移至b柱

1 from C to B //即把编号为1的盘子从c柱移至b柱

3 from A to C //即把编号为3的盘子从a柱移至c柱

1 from B to A

2 from B to C

1 from A to C

给出一个数n,求出最少步数的移动序列。

输入:

一个整数n。

输出:

第一行一个整数k,代表是最少的移动步数。

接下来k行,每行一句话,N from X to Y,表示把N号盘从X柱移动到Y柱。X,Y属于{A,B,C}。

样例输入:

3

样例输出:

7
1 from A to C
2 from A to B
1 from C to B
3 from A to C
1 from B to A
2 from B to C
1 from A to C

提示:

数据保证n<=16。

输出可以用printf语句:printf("%d from %c to %c\n",n,a,b);

1606454443645068571.png

如果一秒钟移动一次,世界毁灭需要多长时间呢?5845.54亿年以上,而地球存在至今不过45亿年,地球现在还是很安全的。

以下是代码:

#include<bits/stdc++.h>
using namespace std;
void hanio(int n,char x,char y,char z){
	if(n==0)return ;
    hanio(n-1,x,z,y);
    cout<<n<<" from "<<x<<" to "<<z<<'\n';
    hanio(n-1,y,x,z);
}
int main(){
    int n;
    cin>>n;
    cout<<pow(2,n)-1<<endl;
    hanio(n,'A','B','C');
    return 0;
}

如有疑问,可以在下方评论中提出哦~

小编会尽量解决你的问题。

汉诺塔问题matlab代码 设A、B、C三个塔座,在A上叠加着从大到小的n个圆盘,要求把A上的圆盘移到C上,打印每一个圆盘移动轨迹: 每次只能移动一个圆盘; 任何时刻不允许将大圆盘放在小圆盘之上; 可借助辅助塔B 立即下载

相关推荐

汉诺塔(hanoi)代码(输出移动过程)

汉诺塔 vc6编译,输入要挪动的盘子数,输出搬运过程。

汉诺塔游戏

题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下: 1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方) 2. 移动的过程中,你必须保证大的盘

No Game No Life的专栏 1274

Autosar中CAN信号传输的模块化解析与实战应用

本文深入解析了AUTOSAR架构下CAN信号传输的模块化流程,详细阐述了从应用层软件组件(SWC)到COM模块打包、PduR路由、CanIf硬件抽象直至Can Driver驱动的完整“流水线”。文章通过实战案例,重点说明了模块化设计如何实现解耦与可移植性,并提供了关键模块配置要点与调试技巧,旨在帮助开发者构建高可靠、实时的车载通信系统。

g9h0i1的博客 902

matlab 全自动汉诺塔

c语言课本上有一段用递归函数解汉诺塔的方法,我将其用matlab写了出来并用之前的汉诺塔程序将其可视化

slandarer的博客 2140

✔B【AD623】【单运放】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号

【】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号

童话与梦的博客 8278

5.3 磁悬浮轴承:基于有限元法的电磁场分析

摘要:本文系统阐述了有限元法在磁悬浮轴承电磁场分析中的应用。相较于等效磁路法和解析法,有限元法能精确处理复杂几何、材料非线性和动态效应。重点介绍了三维静磁场仿真(用于计算稳态磁场、电磁力和电感)和瞬态磁场仿真(用于分析动态过程和损耗)的关键设置与后处理方法。通过有限元分析可验证承载力、评估损耗分布并指导结构优化,形成"磁路设计-有限元验证-参数修正"的闭环设计流程,为磁轴承的精确设计和性能评估提供可靠依据。

技术工作者 1290

递归之汉诺塔问题

我的个人博客:汉诺塔问题 一.起源:   汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 二.抽象为数学问题:   如下图所示,从左到右有A、B、C三根...

Taylar_where的博客 310

Pytorch学习笔记(III)——提取特征

目录一、引言二、具体步骤1、参数模型2、网络结构3、参数载入4、特征提取器5、读取图片三、完整代码 一、引言   深度学习在许多任务中主要充当着特征学习的作用,而学习完的特征才是后续应用的一个关键。本文将主要介绍,如何提取任意目标层的特征图。   本文以输入数据为图片为例。 二、具体步骤 1、参数模型 博主使用了ResNet50训练了一个人脸识别的网络   训练完成的深度学习模型,我们会保存一...

lockonlxf的博客 2643

汉诺塔问题

有A、B、C三根柱子,第一个有64个盘子,从上往下盘子越来越大。现要把64个盘子全部移到第3个柱子上,移到的时候始终只能小盘子压着大盘子,而且每次只能移到一个。 分析: 假设第一根只有3个盘,从上往下分别为 a、b、c,那么移动这3个盘到第三根柱子的流程如下: 把 a 从第一根柱子移动到第三根柱子,即 A -> C 把 b 从第一根柱子移动到第二根柱子,即 A -&gt...

大宇的专栏 1585

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2288

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例

UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。

u011376987的博客 2051

动态规划:打印汉诺塔移动的全部过程

熟悉尝试:打印汉诺塔移动的全部过程

明朗晨光的专栏 1023

基于JAVA的GB28181实现之SIP服务核心组件解析

本文深入解析了基于JAVA的GB28181标准中SIP服务的核心组件实现,包括协议栈选择、消息处理引擎、事务管理器等关键技术点。通过实战案例分享海康威视、大华设备的特殊处理技巧,并提供性能优化和常见问题排查指南,帮助开发者高效构建稳定的视频监控系统。

weixin_30892037的博客 264

汉诺塔移动问题

输入汉诺塔的层数n, 输出移动步骤。

m0_50941842的博客 276

AWS DevOps Agent 完全指南

AI 驱动的 SRE 队友,7×24 自主调查告警、定位根因、生成修复方案、预防未来故障。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 381

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

递归算法——汉诺塔和正整数逆序输出

通常是通过计算机前面的一些项来得出序列中的指定象的值。输入任意一个不大于9位的正整数,输出各位数的逆序形式,例如:输入12345,输出54321。答:递归分为归纳法和分治法,所以递归包含分治,分治法的基本思想是将大问题拆分成小问题来解决,最后再自底向上逐步求出原问题的解。修改代码输出汉诺塔问题的全部移动步骤,初始状态所有圆盘在B塔,要求移动到A塔。递归:从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为递归。递推没有出栈进栈的过程,是一步一步推导的。容易理解但是效率低。

weixin_63530698的博客 522

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

利用递归解决汉诺塔问题

汉诺塔问题求解 汉诺塔问题的描述如下:有A、B、C 3根柱子,在A上从下往上按照从大到小的顺序排列着64个圆盘,以B柱子为中介,把盘子全部移动到C 上。移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子。下边为求解3阶汉诺塔问题的具体程序。在包ace中创建了一个HanoiTower类,然后在类中定义一个moveDish的方法,整个程序运用递归方法实现汉诺塔问题的求解。...

风记忆的博客 906

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

matlab 汉诺塔

黑白色调,简洁大方上档次哟

slandarer的博客 2693

递归算法之汉诺塔(输出步骤)

Problem A: 深入浅出学算法022-汉诺塔问题II Description 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。三根柱子分别标为a, b, c,所有圆盘最初都放在柱子a上,要求最后都放在柱子c上,借助柱子b. Input 多组测试,输入圆盘数n( 1 &

m0_51486634的博客 2104

Matlab依据圆心,半径画圆

Matlab依据圆心,半径画圆

qq_41372644的博客 2446

汉诺塔问题递归求解

一、问题描述  如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数。     二、移动次数 规律查找 (1)n==1 第1次 1号盘 A—->C sum = 1 次 ( 2 ) n=

ruixue_z的博客 681

PKU软微算法题总结2——汉诺塔

2.Q.如何判断单链表是否存在环 给定一个单链表,只给出头指针h: 1、如何判断是否存在环? 2、如何知道环的长度? 3、如何找出环的连接点在哪里? 4、带环链表的长度是多少? 解法: 1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1 步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。 2、对于问题2,记录下问题1的碰撞点p,slow...

bajiaoyu517的博客 375

汉诺塔问题详解

1. 汉诺塔来源及应用 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。 2. 汉诺塔游戏规则 有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则

rain67的博客 6044

汉诺塔OJ代码及解析(C)

#include<iostream> using namespace std; int counter=0; void move(int n,char a,char b,char c) { if(n<1)return; if(n==1){cout<<a<<"->"<<c<<endl;counter++;retu...

藏经阁 622

OJ汉诺塔问题

汉诺塔 题目 如图所示的三根针,其中A针上穿好了由大到小的64片金片,不论白天黑夜,总有一个和尚在按照下面的法则移动金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。和尚们预言,当所有的金片都从A针移到C针上时,世界就将在一声霹雳中消失,这就是所谓的汉诺塔。请编程求出将A针上所有金片移到C上的步骤。 输入 标准输入,一个整数N,表示有N(N不超过5)个金片。 输出 标准输出,输出所有步骤,每一步骤占一行。 #include<bits/stdc++.h> using namespace s

qq_51281451的博客 956
上一篇: 问题解决:【OJ1255】喝醉的狱卒
下一篇: 问题解决:【OJ1642】部分背包
沾花把玖
博客等级 码龄5年 899粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值