起源(Origin):
最早發明這個問題的人是法國數學家愛德華·盧卡斯。
傳說印度某間寺院有三根柱子,上串64個金盤。寺院裡的僧侶依照一個古老的預言,以上述規則移動這些盤子;預言說當這些盤子移動完畢,世界就會滅亡。這個傳說叫做梵天寺之塔問題(Tower of Brahma puzzle)。但不知道是盧卡斯自創的這個傳說,還是他受他人啟發。
若傳說屬實,僧侶們需要264 − 1步才能完成這個任務;若他們每秒可完成一個盤子的移動,就需要5849億年才能完成。整個宇宙現在也不過137億年。
這個傳說有若干變體:寺院換成修道院、僧侶換成修士等等。寺院的地點眾說紛紜,其中一說是位於越南的河內,所以被命名為「河內塔」。另外亦有「金盤是創世時所造」、「僧侶們每天移動一盤」之類的背景設定。
佛教中確實有「浮屠」(塔)這種建築;有些浮屠亦遵守上述規則而建。「河內塔」一名可能是由中南半島在殖民時期傳入歐洲的。
來源網址: http://zh.wikipedia.org/wiki/%E6%B1%89%E8%AF%BA%E5%A1%94
這個遊戲有 三個柱子,暫以 A B C 代替
目的,要把 A柱上的多個盤子由A 移動到 C 柱
當一個盤子時, A -> C
當二個盤子時, A -> B, A -> C, B -> C
解法重點,只要超過二個盤子,都可以想像只有二個盤子
也就是 n 跟 n-1 個盤子(最低部的盤子跟除了 最底部以外的盤子)
最底部以外的盤子 n - 1
最低部的盤子為 n
所以只有三個步驟不斷重複
A -> B
A -> C
B -> C
第一步 將 n-1個盤子 A移動到B
第二步 將 最底部盤子n A移動到B
第三步 將 n-1個盤子 B移動到C
有圖說明觀念才會清楚些
python學習心得、練習、教學 易於學習、功能強大,語法清晰易讀, 方便後續維護,與其它語言結合性強。 如jython(java)、ironpython(visual studio),等於可拿別的語言優點來做結合,又有個別稱『膠水語言』
2014年9月10日 星期三
2014年7月2日 星期三
go語言 教學2 條件式If else...switch
func main() { for i := 0; i < 20; i++ { if i%2 == 0 { fmt.Println("even:", i) } else { fmt.Println("odd:", i) } } }
if i%2 == 0
golang if 條件式省略了() 無需括號即可做條件判斷
多重條件式
func main() { scores := []int{30, 50, 60, 80, 70, 90} for i := 0; i < len(scores); i++ { s := scores[i] if s/20 == 5 { fmt.Printf("score: %d is S\n", s) } else if s/20 == 4 { fmt.Printf("score: %d is A\n", s) } else if s/20 == 3 { fmt.Printf("score: %d is B\n", s) } else if s/20 == 2 { fmt.Printf("score: %d is C\n", s) } else { fmt.Printf("score: %d is D\n", s) } } }
go語言 教學1 基礎
go 語言被譽為這個世代的C語言,其精神也繼承了c語言的優點,少即多,沒有太多花俏的特性,所用到的關鍵字只有二十五個,跟c語言31個、c++89個比較,顯得相當精簡。並行機制也使得go語言,編寫多線程及網路編程都相當容易!
go語言主要為系統及網路編程而設計, 一些設計要求較為嚴格。導入的模組及聲明的變數,未使用無法通過編譯,go精簡的特性,也導致少了一些新穎好用的特性,如函數式語言的列表推導。
>>> [ x for x in range(20) if x % 2]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
基本語法
go保留了c語言風格,為讓早已熟悉c style的人,減少學習成本,因此語言跟c很相像
go語言主要為系統及網路編程而設計, 一些設計要求較為嚴格。導入的模組及聲明的變數,未使用無法通過編譯,go精簡的特性,也導致少了一些新穎好用的特性,如函數式語言的列表推導。
>>> [ x for x in range(20) if x % 2]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
基本語法
go保留了c語言風格,為讓早已熟悉c style的人,減少學習成本,因此語言跟c很相像
package main import ( "fmt" ) func main() { fmt.Println("Hello World!") }
函數聲明關鍵字func 跟c 一樣需有main()函數做為程式進入點。
main() 表示程式一被執行時,就會被執行的位置
採用了大括號{} 做為程式縮排判定
正確
func main() { fmt.Println("Hello World!") }
錯誤
func main()
{
fmt.Println("Hello World!")
}
golang 編譯時會統一格式輸出
編輯器存檔時,也會調用golang的format,做語法編排修正
因此在golang上難以看到五花八門的寫法
2014年1月16日 星期四
訂閱:
文章 (Atom)