【题目描述】

约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。

这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615

这是一个天文数字,若每一微秒可能计算(并不输出)一次移动,那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。

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

【输入】

输入为一个整数(小于20)后面跟三个单字符字符串。

整数为盘子的数目,后三个字符表示三个杆子的编号。

【输出】

输出每一步移动盘子的记录。一次移动一行。

每次移动的记录为例如 a->3->b 的形式,即把编号为3的盘子从a杆移至b杆。

【输入样例】

2 a b c

【输出样例】

a->1->c
a->2->b
c->1->b

汉诺塔问题其实说简单也不简单,到是难起来还是很难的,因为我们的脑袋的堆栈有限,我们只能枚举几个有限的例子,但是如果我们找到规律就可以用递归去做啊,这就是递归的好处,但是递归的坏处就是太费时间,

汉诺塔问题就是把n个盘子,先把n-1个盘子移动到过度盘,然后把第n个盘子移动到目标盘

这题注意一下,是把a盘移动到b 而不是我们的常规思维移动到c盘

#include<iostream>
#include<map>
#include<cstring>
#include<cstdio>
using namespace std;
int k=0;
void f(int n,char a,char c,char b)
{if(n==0) return ;f(n-1,a,b,c);printf("%c->%d->%c\n",a,n,b);f(n-1,c,a,b);}
int main()
{int n;cin>>n;char a,b,c;cin>>a>>b>>c;f(n,a,c,b);return 0;
}

1205:汉诺塔问题相关推荐

  1. 信息学奥赛一本通 1205:汉诺塔问题 | OpenJudge 2.2 6261:汉诺塔问题

    [题目链接] [ybt 1205:汉诺塔问题 OpenJudge 2.2 6261:汉诺塔问题 [题目考点] 1. 递归 [解题思路] 设输入的左中右三个杆分别为a,b,c.题目要将摞在a杆上的n层汉 ...

  2. 信息学奥赛一本通(1205:汉诺塔问题)

    1205:汉诺塔问题 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 19568     通过数: 7240 [题目描述] 约19世纪末,在欧州的商店中出售一种智力 ...

  3. 一本通1205:汉诺塔问题(含严格证明)

    [题目描述] 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移 ...

  4. 汉诺塔(三)_栈的应用

    问题 E: 汉诺塔(三) 时间限制: 3 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北 ...

  5. 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)

    前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...

  6. Ka的递归编程练习 Part4|Hanoi汉诺塔,双色汉诺塔的也有

    1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s== ...

  7. 技术图文:如何实现汉诺塔问题?

    背景 最近在辅导小孩们学习编程,在介绍函数递归时,最典型的就是汉诺塔问题了. 我在这里总结一下,以方便大家的学习. 汉诺塔问题源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在 ...

  8. 汉诺塔问题---小昝

    C语言 #include <stdio.h> void move(char A,char C){printf("%c ---> %c\n",A,C); }void ...

  9. 轻松理解汉诺塔问题(图解java描述)

    引言:(易于理解) 汉诺塔看似简单的几行代码,却蕴含着奇妙的算法.我从我个人学习的角度来说.我一开始理解了原理,但是编码不会编,这也就是所谓的眼高手低.多研究多在IDE(eclipse-java,VS ...

  10. 栈与队列5——汉诺塔问题(方案二)

    题目 汉诺塔问题的基础上,增加限制,必须得经过中间,不能直接从左到右或从右到左,求当塔有N层的时候打印最优移动过程和最优移动总步数 要求 法一:递归法 法二:非递归法,用栈来模拟 解析 法二:非递归法 ...

最新文章

  1. Linux目录与文件常见处理命令
  2. [文件系统]文件系统学习笔记(一)---基本概念以及inode
  3. 访问List的itemRenderer的组件中定义的方法
  4. 算法提高 高精度乘法(java)
  5. 计算机组成原理实验内存读数,计算机组成原理实验
  6. ubuntu ssh 登录日志_全球第一开源ERP Odoo操作手册 安装ssh服务和ssh客户端
  7. javascript高级程序设计笔记-第八章(BOM)
  8. 【优化布局】基于matlab遗传算法求解带出入点的车间布局优化问题【含Matlab源码 011期】
  9. linux精简版远程登录,Linux下定制SSH来简化远程访问的方法
  10. 非参数统计单样本非参数检验之符号检验
  11. python怎么读单词和古文_Python 实现文言文词频统计
  12. cisp_pte培训试题
  13. Android Q 修改Fingerprint
  14. STM32 定时器编码器模式时,如何理解编码器计数
  15. Debian 11(bullseye) 安装Nextcloud,使用PostgreSQL
  16. 《必然》 一书中120条书摘
  17. Java8新特性JDK8之joining函数
  18. 基于安卓的校园订餐系统开发设计
  19. 安卓卡片式ViewPager
  20. 期末安卓——摆烂小白一天的复习生活

热门文章

  1. 牛顿法 泰勒二次展开式
  2. 图解网络硬件 资料分享
  3. 收到大量垃圾短信怎么办?如何屏蔽垃圾短信?
  4. linux运维是做什么的
  5. UE4 实时获取天气信息
  6. 0402网络基础--查看及测试网络连通、IP地址、IPv6、子网划分
  7. WMS库存盘点流程 WMS库存盘点计划
  8. 微服务落地,我们在考虑什么?\n
  9. html中怎样设置邮件地址,我该如何为自己的域名设置邮箱地址呢?
  10. python任务编排_工作流中的任务编排与治理