当前位置: 首页 > ds >正文

汉诺塔(又称河内塔)

汉若塔

  • 说明
  • 解法
  • 代码区

说明

说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。

解法

解法如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1,所以当盘数为64时,则所需次数为:264- 1 = 18446744073709551615为5.05390248594782e+16年,也就是约5000世纪,如果对这数字没什幺概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右。

代码区

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

#include <stdio.h>void hanoi(int n, char A, char B, char C) {if(n == 1) {printf("Move sheet %d from %c to %c\n", n, A, C);}else {hanoi(n-1, A, C, B);printf("Move sheet %d from %c to %c\n", n, A, C);hanoi(n-1, B, A, C);}
}int main() {int n;printf("请输入盘数:");scanf("%d", &n);hanoi(n, 'A', 'B', 'C');return 0;
} 
http://www.xdnf.cn/news/11310.html

相关文章:

  • linux下网络发包工具
  • 均匀分布白噪声和高斯白噪声及其matlab产生方式
  • MybatisPlus:泛型方法使用 default <V> List<V> listObjs(Function<? super Object, V> mapper)
  • Win10下Windows Mobile设备中心无法连接斑马PDA 、无法拷贝文件———— Windows 设备中心64位安装包
  • i春秋首届全国数据安全大赛部分复盘
  • 【吐血整理!20个CC0正版素材网站,值得珍藏】自媒体视频创作者必备
  • android wifi 网桥,史上最全无线网桥知识,收藏这一篇就够了!
  • Java实现钉钉自定义机器人接入
  • Three.js(学习)
  • 云计算基础、Iass、Pass、Sass区别
  • 6-php的web环境安装
  • 【一文带你了解bluetooth】
  • 凶残的挖矿脚本,奴役我数千机器!
  • Google Web Designer for mac(专业网站设计工具)
  • 什么是金叉、死叉
  • java soap api操作和发送soap消息
  • numpy中的nonzero()
  • 什么是ip数据库
  • 安装 Windows 7 VM虚拟机
  • 重装系统基础教程
  • layout布局_关于 layout_weight,你到底知多少
  • 硅基流动完成近亿元融资:加速生成式AI技术普惠进程
  • 想要自己制作一款游戏,需要掌握哪些基本技能
  • android HorizontalScrollView讲解
  • 3D动画软件
  • 电脑操作系统的安装
  • RapidXML的使用
  • Qt 是一个功能强大的跨平台开发框架
  • match_parent和wrap_content的区别
  • C++语法基础--ostream,cout及其格式控制,缓冲区