加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 5875 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.009673 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言