Ruby 板


LINE

這問題不知道在這邊問妥不妥當 如果不適合的話請跟我說 我會把他刪掉 以下是我寫的河內塔程式 可以將每個碟子移動的過程畫出來方便觀察 演算法是參考網路上很多的範例所寫的 可是我對於各碟子移動的規則 還是看不出一個所以然來 是否有人可以幫我解釋一下 或是網路上有更詳細說明可以與我分享 $src = Array.new $tmp = Array.new $des = Array.new $disk = 3 # 組合出橫向的線 def draw_line(q, index, height) _rc = '' i = index - (height - q.size) if(i<0) _rc << ' '*(height-1) << "||" << ' '*(height-1) else _rc << ' '*(height-q[i]) << "=="*(q[i]) << ' '*(height-q[i]) end return _rc end # 畫出目前的狀態 def pirnt_queue puts '' _tower_height = $disk+1 0.upto(_tower_height-1) do |i| _line = '' _line << draw_line($src, i, _tower_height) _line << draw_line($tmp, i, _tower_height) _line << draw_line($des, i, _tower_height) puts _line end end # 移動最上面的碟子 def move_top(q_src, q_des) q_des.insert(0, q_src[0]) q_src.delete_at(0) pirnt_queue end def honai(n, q_src, q_tmp, q_des) if(n==1) move_top(q_src, q_des) return end honai(n-1, q_src, q_des, q_tmp) move_top(q_src, q_des) honai(n-1, q_tmp, q_src, q_des) end def hand_made move_top($src, $des) move_top($src, $tmp) move_top($des, $tmp) move_top($src, $des) move_top($tmp, $src) move_top($tmp, $des) move_top($src, $des) end def main 1.upto($disk){|i|$src.push(i)} pirnt_queue #hand_made honai($disk, $src, $tmp, $des) end if($1==$FILE) main end --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.71.34
1F:推 mars90226:簡單來說,有三個地方可放碟子,大碟子要在小碟子下面 09/20 14:15
2F:→ mars90226:然後把全部碟子從一個地方一到另一個地方 09/20 14:16
3F:推 sand1050:正常是畫樹狀 看就很清楚了 09/20 15:47
4F:推 SansWord:重點在遞迴規則: 09/22 11:44
5F:→ SansWord:把一個高度為 n 的塔從 A 移動到 C = 09/22 11:45
6F:→ SansWord:先把高度為 n-1 的塔從 A 移動到 B, 在把最底下那片 09/22 11:45
7F:→ SansWord:從 A 放到 C, 在把剛剛移動到 B 的 n-1 的塔移動到 C 09/22 11:46
8F:→ SansWord:收斂條件是當 n 為 1, 則直接把那片移動過去目的地即可 09/22 11:46
9F:→ SansWord:honai 這個method 就是在形容這件事 09/22 11:47
10F:→ SansWord:move_top 則是移動一片使用的 method 09/22 11:47
11F:→ SansWord:這樣懂了嗎 09/22 11:47
12F:→ SansWord:移動次數上的分析是 hanai(n) = 2 * hanai(n-1) + 1 09/22 11:48
13F:→ mars90226:樓上小心板規中的推文限制XD 09/23 09:36
14F:→ godfat:是的,下次請避免推太多,直接回文即可 O_o 09/24 02:35
15F:→ SansWord:喔抱歉....一推就推過頭.... 09/27 01:20







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP