汉诺塔

【题目】传说印度的一个神庙中,供有天神制成的“汉诺塔”。它是三根柱子。在一根柱子上,从上到下,由小到大叠放着64个金盘。僧人们要把这些金盘搬到另一根柱子上。规则是:一次只能移动一个圆盘。大盘不能叠在小盘的上面。
那么,完成这个任务,最少要移动多少次呢?

这个问题难点也是大整数运算。
大整数的构造见【问题34】。

另外还有一个迷惑人的地方:比如要把这些盘子都移到c柱,那第一步是把最小的那个盘放到B柱好呢?还是放到C柱好呢?肯定不能随意。
其实大可不必纠结。人家没问你怎么移动,只是问最少多少步。
这个问题,只要倒着考虑就迎刃而解了。
1)要把所有盘移到C柱,肯定要把最大盘的上边那些盘都拿开。
2) 拿到哪里呢?肯定C柱上什么都不能有,不然最大那个盘放不上去。
3)得出结论:必须把最大盘上那些都移到B柱上,然后最大盘上C,然后B柱上那些再上C。

现在问题分解为:最大盘上的那些移到B上去,最少多少步?
这个问题与当前任务是相似的。只是规模小1而已。这提示我们可以用递归。

上代码

hanoi :: Int -> Integer
hanoi 1 = 1
hanoi n = hanoi (n-1) * 2 + 1 --- n上面的移走 + n入位 + n上面的移来。main :: IO ()
main = print $ hanoi 64

现在,把问题稍微变一下,给定盘子数目,要从A柱整体移到C柱,求第一步是先到B,还是先到C?
显然,1 个盘是先到c,2个盘是先到B。

这其实也可以用递归思路。
n要到C, n-1个必须到B,所以n-2个又必须到C, 。。。。

haskell 基础题解(35)相关推荐

  1. haskell 基础题解(31)

    生成全排列 [题目]已知若干字母,求它们所有的可能排列,例如:"abc"的全排列: "abc","acb","bac", ...

  2. 计算机网络基础题解综合练习实验,计算机网络基础题解•综合练习•实验

    计算机网络基础题解•综合练习•实验 作 者:赵宇 编著 出版时间:2005年01月 定 价:23.00 I S B N :9787111137221 所属分类: 标 签: 本书是"计算机网络 ...

  3. 「学习总结-Haskell-1」Haskell 基础知识

    Haskell基础知识 Table of Contents 1 Haskell 基本知识 1.1 Haskell 开发环境安装 1.2 Haskell 代码如何运行 1.3 Haskell 函数定义和 ...

  4. 精选蓝桥杯省赛基础题解2015-2022

    相关链接:蓝桥杯省赛历年真题解2015-2022 蓝桥杯比赛中,可以使用的语言有C/C++,Java和Python. 程序的关键在于编程技巧.数据结构和算法,所以这里的题解均用C/C++语言来写. 参 ...

  5. 【慧河网络安全组】Web基础题解培训

    View-source 类: 1.view_source 题目链接:攻防世界https://adworld.xctf.org.cn/challenges/details?hash=a47bef3d-7 ...

  6. 【Pytorch基础教程35】引入非线性的激活函数

    文章目录 一.从最简单的logistic回归说起 二.为什么需要激活功能 三.常见激活函数特点: 3.1 ReLU激活函数 3.2 sigmoid激活函数 3.3 tanh激活函数 3.4 softm ...

  7. xctf攻防世界pwn基础题解(新手食用)

    文章目录 CGFsb 关于评论区的问题 when_did_you_born 脚本 备注: cgpwn2 目的: 溢出点: 构造shell: exp: strings Level3 status: up ...

  8. 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验

    一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...

  9. PTA乙级题解(110题全)

    First of all 如果你是你们学校的ACM选手 那么我猜你的目标可能是下面几个吧(^v^) (1) ACM区域赛拿牌 (2) PTA顶级(Top Level) (3) CCF-CSP认证400 ...

最新文章

  1. 前端性能优化 —— 项目瘦身
  2. FCN全连接卷积网络(2)--读论文的过程理解
  3. python入门之控制结构-循环结构_Python 入门之控制结构 - 循环结构(一)
  4. PKI/CA (5)X.509公钥证书
  5. ABAP 程序运行锁
  6. 进程间通信 - 邮槽实现
  7. 以及其任何超类对此上下文都是未知的_web前端入门到实战:Javascript 中的「上下文」你只需要看这一篇
  8. 关于vue 框架与后台框架的混合使用的尝试
  9. mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)...
  10. phpmyadmin提示SELECT `prefs` FROM `phpmyadmin`.`pma_table_uiprefs` ······
  11. Kali和Backtrack中更新metasploit后无法连接数据库的问题解决方法
  12. AAC音频的解码算法
  13. IM即时通讯项目讲解(二) 自定义实现图片选择GalleryView
  14. 谈ISO9000-3内容及其与CMM关系
  15. java毕业设计基于javaweb+mysql数据库实现的大学生助学贷款管理系统(源码+论文+开题报告
  16. Java入门基础第2天《java jdk下载与安装教程》
  17. 介绍两种简单实用的信道编码——CRC校验和汉明码
  18. three.js学习笔记(十五)——着色器图案
  19. IDM(PC端下载) -Chrome浏览器插件
  20. 長野の方言「ほうげん」

热门文章

  1. CausalDiscoveryToolbox:因果建模、因果图代码实现
  2. Android中Parcelable接口用法 和 Serializable实现与Parcelabel实现的区别
  3. JsonPath教程
  4. Java注解中produces啥意思_springmvc 没有produces注释,@produces在spring mvc中是什么意思...
  5. 浏览器上不了网但能上QQ
  6. USDT增发,疯狂之下的币圈市场机会何在?
  7. 3D打印机DIY(二)X轴与Z轴安装
  8. Linux _学习——Centos8惨痛教训_木马入侵
  9. 去年治疗过敏性鼻炎所用的药。
  10. 变电站综合自动化系统