背景由来

河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的。1883年法国数学家 Edouard Lucas曾提及这个故事:

据说创世 纪时Benares有一座波罗教塔,是由三支钻石棒所支撑,开始时神在第一根棒上放置64 个由上至下依由小至大排列的金盘,并命令僧侣将所有的金盘从第一根石棒移至第三根 石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬 运完毕之时,此塔将毁损,而也就是世界末日来临之时。

问题分析

        如果柱子标为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 move(int n,char A,char B,char C){if(n == 1){printf("Move sheet %d from %c to %c\n",n,A,C);//移动}else{move(n-1,A,C,B);printf("Move sheet %d from %c to %c\n",n,A,C);//移动move(n-1,B,A,C);}
}int main(){int n;printf("请输入盘数:");scanf("%d",&n);move(n, 'A', 'B','C');return 0;}

写在最后:

        读两遍下来,如果仍然有不清楚的地方,可在评论区留言。

        如果你有其他感到困惑的问题,欢迎留言。

经典算法1-“河内之塔”相关推荐

  1. 【C】C语言之经典算法:河内之塔(1)

    文章目录 前言 一.背景 二.思路解析 三.流程图解析 四.代码附上 五.结果 六.参考链接 [C]C语言之经典算法:河内之塔(1) 前言 博主开通了C语言算法专栏,旨在对于有关C语言的一些经典算法的 ...

  2. JAVA经典算法之河内之塔

    1 .河内之塔 说明 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于 1883 年从泰国带至法国的,河内为越战时 北越的首都,即现在的胡志明市: 1883 年法国数学 ...

  3. 经典算法之汉诺塔求解问题

    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64 ...

  4. java算法1——河内之塔

      河内之塔游戏规则:有A.B.C三个石棒,A上有若干个从小到大依次排列的盘子,盘子的数量为n,现在要求,将A棒上的盘子依次移动到C棒上,并且移动过程中要保证小盘在大盘之上.   (1)当n=1时:将 ...

  5. 算法之一 河内之塔

    河内之塔介绍 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市:1883年法国数学家 Edouard ...

  6. java算法之———河内之塔

    package demo; /** * 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时 * 北越的首都,即现在的胡志明市:18 ...

  7. 汉诺塔算法python_经典算法:汉诺塔

    学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔.算是算法的入门小题目之一吧~ 视频教程 什么是汉诺塔? 我这里直接拉来一个图解释一下(挂了请联系我) 就是这么一个东西 ...

  8. 河内塔算法java_河内递归塔Java

    这是我使用递归解决河内塔的Java代码: /**here is a stack of N disks on the first of three poles (call them A, B and C ...

  9. 河内之塔算法php,河内之塔(汉诺塔)

    题目: 三个柱子刚互维曾屏以公式近开.护相蔽我司幻近开. A.B.C.在A柱子从上到下 按照从小到大的顺序放置64盘子,命令将所有的盘子从A柱子移至C柱子,并且搬运过程中小盘子不能放在大盘子上面,且 ...

  10. C语言经典算法 - 双色河内塔的代码

    把内容过程常用的内容片段记录起来,如下的内容内容是关于C语言经典算法 - 双色河内塔的内容,希望能对各位朋友有所好处. #include <stdio.h> void hanoi(int ...

最新文章

  1. 北京理工大学 python专题课程-Python第七章(北理国家精品课 嵩天等)
  2. 【创业公司的机遇与挑战】如何在1年内从产品助理到产品高管?
  3. 史上最详细Docker部署Mysql主从复制,带每一步骤图!!!
  4. Luogu P5564 [Celeste-B]Say Goodbye (多项式、FFT、Burnside引理、组合计数)
  5. #1098 : 最小生成树二·Kruscal算法
  6. [NOTE] DSVW靶场练习笔记
  7. mysql主主同步冲突_MySQL主主同步主键冲突处理
  8. 快手用旺旺瓶子做机器人_100品牌入榜,在快手的品牌运营怎么做?|11月快手品牌新势力榜揭晓...
  9. 使用NVM管理Node - Windows
  10. 总结:Sharepoint2010 Client Object Model -- ECMAScript Client
  11. 捡来的一个大数模版。很好用
  12. win7变成xp风格了怎么改回_win7桌面怎么改成xp风格
  13. linux shell搜索某个字符串,然后在后面加上字符串?字符串后面插入字符串?sed字符串后面插入字符串?...
  14. 数据结构——十大排序算法
  15. adb如何在linux下安装目录,Linux下Android ADB驱动安装详解
  16. FBT熔融拉锥大芯径多模光纤耦合器简介
  17. qlv视频转换器免费版_腾讯视频素材下载和转换教程
  18. DataBinding原理----单向数据绑定(3)
  19. discus mysql 性能_百万纪录级mysql数据库以及discuz!优化
  20. minio操作,文件上传下载

热门文章

  1. opencv实战——寻找缺失和靶心
  2. 上下文无关文法和正则文法_什么是上下文无关文法?
  3. 在虚拟机上安装linux 宝塔,虚拟机安装宝塔Linux面板
  4. android kswapd0 白话理解
  5. 【华为OD机试真题 JS】连续出牌数量
  6. 什么是解释型语言?什么又是编译型语言?
  7. 转 精辟,太生动了,太形象了。应用于实践,价值无比!
  8. 计算机二级c相关书籍,二级C
  9. PHP菜鸟之简易聊天室
  10. Hexo搭建个人博客网站