加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5878 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   

头像
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: *
推文 x 鲜花 x
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][求助] 请问如何写出这题河内塔

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



献花 x0 回到顶端 [楼 主] | Posted:2011-09-29 23:31 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

参考一下,这是我觉得最简单可以理解的

http://tw.knowledge.yahoo.com/quest...d=1608110103848


试试看 高度(设为 h) h = 3, h = 4, h = 5..... 的河内塔你会发现一个规律

就是 h 为奇数时,第一个盘子都一定会先放到最右边 (假设一开始全部在左边)

h 是偶数时,第一个盘子一定会先放到中间


那么,你就可以发现其中的规律,你试着想想看,h = 3 的河内塔将 "最小的盘子" 移到最右边时

和 h = 4 河内塔将 "最上面的两个小盘子" 依照规律移动到 最右边时,把这两个小盘子 "群组化" 当成是一个小盘子






就会发现,h = 4 移动第三次与 h = 3 移动一次 的感觉是非常像的,这就是上面知识+提到 的想法

当河内塔其中一个杆子是空的时候,要移动比较小的那堆时,可以想像成,整个河内塔要移动的只有 那几个小盘子 (因为不管怎么移动这几个小盘子,都不会违反 小的要在大的上面)

例如,h = 4 时候,如上图下面的情况,要把最右边两个小盘子准备移动到 第二大的盘子(下一步骤 : 移动到中间杆子)


知道这个规律后,就能用 递回 (recursive) 或是一般的 回圈 来跑程式了


[ 此文章被ebolaman在2011-10-03 22:01重新编辑 ]


My BOINC stats :

献花 x0 回到顶端 [1 楼] From:台湾教育部 | Posted:2011-10-03 21:40 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.012958 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言