(递归2)汉诺塔

题目描述

约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。
这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615
这是一个天文数字,若每一微秒可能计算(并不输出)一次移动,那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。

假定圆盘从小到大编号为1, 2, …

输入
输入为一个整数后面跟三个单字符字符串。
整数为盘子的数目,后三个字符表示三个杆子的编号。
输出
输出每一步移动盘子的记录。一次移动一行。
每次移动的记录为例如 a->3->b 的形式,即把编号为3的盘子从a杆移至b杆。
样例输入
2 a b c
样例输出
a->1->c
a->2->b
c->1->b

分析

用递归解决问题,一个关键点是要有递归结束的条件
当只有一个盘子的时候,直接就是A->1->B,这也是递归结束的条件
定义一个函数Hanoi(n,a,b,c)//将n个盘子从a经过c移动到b

当有N个盘子的时候,我们知道需要这样移动,(n-1,a,b,c)//将a上的n-1个盘子经过b移到c。然后将a上的标号为n的盘子移动到b盘子上

此时c盘子上有n-1个盘子,需要把这n-1个盘子上面的n-1-1个盘子移到a上,然后把标签为n-1的盘子移到b盘子上

之后c盘子里面 没东西了,只有a盘子里了,又重复回去了


#include <iostream>
using namespace std;void Hanoi(int n,char a,char b,char c){if(1==n)  cout<<a<<"->"<<1<<"->"<<b<<endl;else{Hanoi(n-1,a,c,b);cout<<a<<"->"<<n<<"->"<<b<<endl;Hanoi(n-1,c,b,a);}}
int main(){int n;char a,b,c;cin>>n>>a>>b>>c;Hanoi(n,a,b,c);return 0;
}

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

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

相关文章

与服务器传文件格式,客户端如何向服务器传文件格式

客户端如何向服务器传文件格式 内容精选换一换已获取该弹性云服务器的密钥文件&#xff0c;如未获取&#xff0c;请参见获取弹性云服务器的密钥文件。弹性云服务器已经绑定弹性IP地址。已配置安全组入方向的访问规则。如果您是在Windows操作系统上登录Linux&#xff0c;可以按照…

docker linux 快速开窗口_技术|如何使用 Docker 快速配置数据科学开发环境?

数据科学开发环境配置起来让人头疼&#xff0c;会碰到包版本不一致、错误信息不熟悉和编译时间漫长等问题。这很容易让人垂头丧气&#xff0c;也使得迈入数据科学的这第一步十分艰难。而且这也是一个完全不常见的准入门槛。还好&#xff0c;过去几年中出现了能够通过搭建孤立的…

(递归3)最大公约数

题目给定两个正整数&#xff0c;求它们的最大公约数。 输入 输入一行&#xff0c;包含两个正整数(<1,000,000,000)。 输出 输出一个正整数&#xff0c;即这两个正整数的最大公约数。 样例输入 6 9 样例输出 3 提示 求最大公约数可以使用辗转相除法&#xff1a; 假…

服务器搭建维护,服务器搭建维护方法

服务器搭建维护方法 内容精选换一换登录Windows操作系统的弹性云服务器时&#xff0c;需使用密码方式登录。因此&#xff0c;用户需先根据创建弹性云服务器时使用的密钥文件&#xff0c;获取该弹性云服务器初始安装时系统生成的管理员密码(Administrator帐户或Cloudbase-init设…

(递归4)放苹果

描述 把M个同样的苹果放在N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;&#xff08;用K表示&#xff09;5&#xff0c;1&#xff0c;1和1&#xff0c;5&#xff0c;1 是同一种分法。 输入 第一行是测试数据的数目t&…

魔兽怀旧服服务器怎么修改,《魔兽世界怀旧服》转服功能怎么用 转服功能使用方法教程...

导读魔兽世界怀旧服不少玩家都处在高负载服务器中&#xff0c;这不仅对于服务器压力太大&#xff0c;而且对于玩家的游戏体验也不好&#xff0c;近期魔兽世界怀旧服免费角色转移功能开放&#xff0c;缓解玩家的压力和带来更好的游戏体验&#xff0c;下面小编就给大家带来魔兽..…

mac os touch命令_Mac系统忘记开机密码怎么办?

Hi~我是系统派~使用Windows系统的小伙伴都知道忘记开机密码可以通过PE工具解除实在不行还可以重装系统如果你手上的是Mac电脑同样也是不记得登录密码了有没有相似的解决方案呢&#xff1f;本教程教你两种Mac系统重置开机密码的方法万一哪天真的不记得密码了可以尝试解除千万别干…

(递归5)全排列

题目&#xff1a; 算法竞赛入门经典例7-2-1&#xff1a;输入整数n&#xff0c;按字典序从小到大的顺序输出前n个数的 所有排列 A&#xff1a;已确定的前缀数列 S&#xff1a;需要进行全排列的元素集合 伪代码&#xff1a; void print_permutation(序列A, 集合S) { if(…

sql2012怎样修改服务器名称,sql2012服务器名称怎么设置

sql2012服务器名称怎么设置 内容精选换一换您可以借助报表服务制作各种各样的报表&#xff0c;无论是简单的还是复杂的报表&#xff0c;同时系统提供订阅功能方便用户对报表进行订阅。本文主要介绍RDS使用SSRS(Reporting Services)报表服务。微软的Microsoft SQL Server产品中包…

超声波测距仪编程_超声波测距仪参考(含原理图程序)

1绪论当前社会经济的不断发展和工业科学技术的不断提高&#xff0c;汽车已逐渐进入不少百姓家。汽车使用数量的不断增加&#xff0c;从而由此导致的倒车交通安全问题也非常严重&#xff0c;道路交通压力增加&#xff0c;交通安全问题也是面临严峻挑战。在面临如此严峻的交通安全…

(回溯4)部分全排列

题目设有n个整数的集合&#xff5b;1&#xff0c;2&#xff0c;…&#xff0c;n&#xff5d;&#xff0c;从中任意取出r个数进行排列&#xff08;r< n&#xff09;&#xff0c;试着列出所有排列 #include <iostream> using namespace std; bool vis[100]; int total0…

vue.js将本地文件上传到ftp服务器,vue项目使用FTP传输部署项目服务器,node命令编写...

#!/usr/bin/env nodevar fs require(fs); // 引入需要模块var vinylFs require( vinyl-fs );var ftp require( vinyl-ftp );var vueConfig require(../vue.config) //这里是为了抓取打包文件名称var env process.argv[2]?process.argv[2].replace(…

python程序员可以做到多少岁_程序员一般做到多少岁,那些70后的程序员都消失了?...

在娱乐圈&#xff0c;哦不&#xff0c;是在程序员这个吃青春饭的行业&#xff0c;有一个人人闻之色变的话题&#xff0c;曰&#xff1a;「年老色衰」。只要是个程序员&#xff0c;心里都会惴惴不安的想&#xff1a;「我老了以后卖不动色相&#xff0c;哦不&#xff0c;写不动代…

(递归7)生成可重集的排列

题目 输入数组P&#xff0c;并按字典序输出数组A各元素的所有全排列 P数组&#xff1a;是存储基本数据的 A数组&#xff1a;是储存答案的 cur&#xff1a;当前需要确定的元素位置时存答案的位数的 c1&#xff0c;c2&#xff1a;做标记&#xff0c;if满足条件后再进行下次递…

利用next_permutation解答全排列问题

枚举所有排列的另一个方法是从字典序最小排列开始&#xff0c;不停调用“求下一个排列”的过 程。 全排列的个数A(N,N)(N)(N-1)…*2*1N! 下一个排列&#xff1a;通常按照升序顺序&#xff08;字典序&#xff09;获得下一个排列 stl next_permutation找下一个排列的算法 如…

根据大小分割大文本_场景文本检测—CTPN算法介绍

SIGAI特约作者&#xff1a;沪东三哥 原创声明:本文为SIGAI 原创文章&#xff0c;仅供个人学习使用&#xff0c;未经允许&#xff0c;不得转载&#xff0c;不能用于商业目的。其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》&#xff0c;清华大…

(贪心1)排队接水

问题描述   有n个人排队到r个水龙头去打水&#xff0c;他们装满水桶的时间t1、t2………..tn为整数且各不相等&#xff0c;应如何安排他们的打水顺序才能使他们总共花费的时间最少&#xff1f; 输入格式   第一行n&#xff0c;r (n<500,r<75)   第二行为n个人打…

vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式

1、可以用公共的父组件来实现&#xff1b;2、可以在store.js里面在设置公共变量&#xff1b;3、也可以用本地存储localStorage.setItem()和localStorage.getItem()&#xff0c;通过修改本地存储的值和获取修改后的值来实现&#xff1b;4、就是父子组件间的值的传递与修改props&…

(贪心)均分纸牌

题目描述 有 N 堆纸牌&#xff0c;编号分别为 1&#xff0c;2&#xff0c;…, N。每堆上有若干张&#xff0c;但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌&#xff0c;然后移动。移牌规则为&#xff1a;在编号为 1 堆上取的纸牌&#xff0c;只能移到编号为 2 的堆上…

agilebpm脑图_设计开发平台前端框架介绍 | AgileBPM 敏捷工作流开发平台—开源免费-基于 Activiti 工作流引擎、Flowable...

目前设计平台前端是独立部署的&#xff0c;引入了 Angular 和 Vue&#xff0c;您可以根据自己技术强项 选择使用 Angular 或者 Vue&#xff0c;他们引入的成本都很小。比如我们团队使用 Angular 很多年了&#xff0c;依赖注入&#xff0c;模块化概念很舒服&#xff0c;使用它构…