haskell 基础题解(35)
汉诺塔
【题目】传说印度的一个神庙中,供有天神制成的“汉诺塔”。它是三根柱子。在一根柱子上,从上到下,由小到大叠放着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)相关推荐
- haskell 基础题解(31)
生成全排列 [题目]已知若干字母,求它们所有的可能排列,例如:"abc"的全排列: "abc","acb","bac", ...
- 计算机网络基础题解综合练习实验,计算机网络基础题解•综合练习•实验
计算机网络基础题解•综合练习•实验 作 者:赵宇 编著 出版时间:2005年01月 定 价:23.00 I S B N :9787111137221 所属分类: 标 签: 本书是"计算机网络 ...
- 「学习总结-Haskell-1」Haskell 基础知识
Haskell基础知识 Table of Contents 1 Haskell 基本知识 1.1 Haskell 开发环境安装 1.2 Haskell 代码如何运行 1.3 Haskell 函数定义和 ...
- 精选蓝桥杯省赛基础题解2015-2022
相关链接:蓝桥杯省赛历年真题解2015-2022 蓝桥杯比赛中,可以使用的语言有C/C++,Java和Python. 程序的关键在于编程技巧.数据结构和算法,所以这里的题解均用C/C++语言来写. 参 ...
- 【慧河网络安全组】Web基础题解培训
View-source 类: 1.view_source 题目链接:攻防世界https://adworld.xctf.org.cn/challenges/details?hash=a47bef3d-7 ...
- 【Pytorch基础教程35】引入非线性的激活函数
文章目录 一.从最简单的logistic回归说起 二.为什么需要激活功能 三.常见激活函数特点: 3.1 ReLU激活函数 3.2 sigmoid激活函数 3.3 tanh激活函数 3.4 softm ...
- xctf攻防世界pwn基础题解(新手食用)
文章目录 CGFsb 关于评论区的问题 when_did_you_born 脚本 备注: cgpwn2 目的: 溢出点: 构造shell: exp: strings Level3 status: up ...
- 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验
一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...
- PTA乙级题解(110题全)
First of all 如果你是你们学校的ACM选手 那么我猜你的目标可能是下面几个吧(^v^) (1) ACM区域赛拿牌 (2) PTA顶级(Top Level) (3) CCF-CSP认证400 ...
最新文章
- 前端性能优化 —— 项目瘦身
- FCN全连接卷积网络(2)--读论文的过程理解
- python入门之控制结构-循环结构_Python 入门之控制结构 - 循环结构(一)
- PKI/CA (5)X.509公钥证书
- ABAP 程序运行锁
- 进程间通信 - 邮槽实现
- 以及其任何超类对此上下文都是未知的_web前端入门到实战:Javascript 中的「上下文」你只需要看这一篇
- 关于vue 框架与后台框架的混合使用的尝试
- mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)...
- phpmyadmin提示SELECT `prefs` FROM `phpmyadmin`.`pma_table_uiprefs` ······
- Kali和Backtrack中更新metasploit后无法连接数据库的问题解决方法
- AAC音频的解码算法
- IM即时通讯项目讲解(二) 自定义实现图片选择GalleryView
- 谈ISO9000-3内容及其与CMM关系
- java毕业设计基于javaweb+mysql数据库实现的大学生助学贷款管理系统(源码+论文+开题报告
- Java入门基础第2天《java jdk下载与安装教程》
- 介绍两种简单实用的信道编码——CRC校验和汉明码
- three.js学习笔记(十五)——着色器图案
- IDM(PC端下载) -Chrome浏览器插件
- 長野の方言「ほうげん」
热门文章
- CausalDiscoveryToolbox:因果建模、因果图代码实现
- Android中Parcelable接口用法 和 Serializable实现与Parcelabel实现的区别
- JsonPath教程
- Java注解中produces啥意思_springmvc 没有produces注释,@produces在spring mvc中是什么意思...
- 浏览器上不了网但能上QQ
- USDT增发,疯狂之下的币圈市场机会何在?
- 3D打印机DIY(二)X轴与Z轴安装
- Linux _学习——Centos8惨痛教训_木马入侵
- 去年治疗过敏性鼻炎所用的药。
- 变电站综合自动化系统