18938 汉诺塔问题

时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0

题型: 编程题 语言: 不限定

Description

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着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

思路
定义 初始边X 辅助边Y 终边Z
1.要将最底层移到终边Z,即需要将上方n-1层移到辅助边Y
2.将最底层移到终边Z
3.此时辅助边Y变为初始边Y,初始边X变为辅助边X,要将最底层移到终边Z,即需要将上方n-2层移到辅助边X
4.将最底层移到终边Z

直到上方为0结束。

#include <cstdio>
#include <iostream>
using namespace std;//定义移动move:将N盘子从X移动到Y
void move(int N,char X, char Y) {cout << X << "->" <<N<< "->" << Y<<endl;
}//定义:(N,X,Y,Z)将初始边X上的N层通过辅助边Y,移到Z。
void hanoi(int N, char X, char Y, char Z) {//递归出口 N<=1if (N == 1)move(N,X, Z); else {//将初始边X的N-1通过终边Z移动到辅助边Yhanoi(N - 1, X, Z, Y);//将初始边X的N从初始边X移动到终边Zmove(N,X, Z);//将初始边Y的N-1通过辅助边X移动到终边Zhanoi(N - 1, Y, X, Z);}
}//该题设意思初始边是X终边是Y
int main() {int n;cin >> n;char X, Y, Z;cin >> X >> Y >> Z;//将在初始边X的n层通过辅助边Z移动到终边Yhanoi(n, X, Z, Y);return 0;
}

18938 汉诺塔问题相关推荐

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

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

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

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

  3. 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== ...

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

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

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

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

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

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

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

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

  8. 栈与队列5——汉诺塔问题

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

  9. 【项目展示】自己用C语言编写的汉诺塔小游戏

    本文目录 1.前言 2.什么是汉诺塔? 3.项目规格 4.基本思路 5.源代码 6.运行结果 7.感想与心得 8.未来规划 1.前言 昨儿个把自己大一时候写过的五子棋重构了一下,之后就在想着要不把不知 ...

最新文章

  1. msdn:什么时候画窗口
  2. iOS进阶之架构设计MVVM模式仿新闻项目(6)
  3. linux 开机自启动设置 inittab 详解
  4. HTML5学习笔记(二)2015-12-7
  5. 人工智能 | 自然语言处理研究报告(概念篇)
  6. Move_base理解
  7. window安装gcc编译器
  8. CocoaPods打包静态库
  9. CSS 自定义属性 -- 使用 JS 和不使用 JS
  10. 计算机联机玩游戏的操作方法,3种建立局域网的方式,不用网也可以联机玩游戏-局域网设置...
  11. php 数字转换为字符串,PHP-将数字转换为Excel的字符串
  12. 7.22版本服务器维护,7月22日服务器例行维护公告
  13. mac pro 键帽 方向键 上下键 拆卸
  14. ORACLE ORA错误码大全 (备忘)
  15. C# %253A%252F%252F 咋编码
  16. @mentions for Users with ActionText; 使用Tribute.js库
  17. 十大WEB安全问题(OWASP Top Ten Project-2017)
  18. Jeremy Cole大神关于Innodb的文章分享
  19. JSON與ajax使用方法
  20. faker和劫的图片_Faker喜迎23岁生日 生涯回顾:双劫三冠都比不上最后一图

热门文章

  1. 融云钜惠来袭,新客尝鲜首月 2.7 折起,超值套餐 6 折起
  2. casperjs ajax请求,CasperJs中的sendAJAX数据参数
  3. C++基础学习笔记(五)——核心编程PART3
  4. 直接打印RAW文件到打印机
  5. CH0502 七夕祭
  6. 爱快路由安装mysql_ESXi安装爱快iKuai OS路由(图文教程)
  7. 深度解读物联网区块链“IOTA”:不仅解决IoT痛点,还解决区块链痛点
  8. 基于大数据分析技术实现对信用卡盗刷的预防
  9. 牛客笔试OJ-在线编辑器输入输出总结
  10. Centos7设置1920x1080分辨率