編碼也快樂:兩隻水壺F#程式
F# 是微軟 .NET 戰略的一門重要語言,中文的 F# 書籍很少,賈洪峰老師翻譯了一本《C# 與 F# 程式設計實踐》。期望圖靈公司能引進優秀入門教程 Programming F# 3.0,封面故事: http://www.ituring.com.cn/article/31648,封面圖片見文末。
言歸正傳,解釋一下我的 F# 程式(參加編碼也快樂活動第三波):
主函式 pot 的三個引數 t a b 分別是目標水量及兩個壺的容量。
函式 solve 用於解題,引數 p q 是兩個壺的當前水量。
函式第一行列印當前水量;
如果當前水量等於目標水量,成功;
否則,如果 A 壺空,則裝滿它;
否則,如果 B 壺滿,則清空它;
否則,儘可能地從 A 壺往 B 壺倒水;
遞迴地呼叫以上步驟即可完成解題。
函式 gcd 用歐幾里得演算法求兩個整數的最大公約數。
主函式 pot 的第一行首先判斷輸入的引數 t a b 是否超出允許範圍;
接著根據目標水量是不是兩個壺的容量的最大公約數的倍數判斷是否有解;
現在可以置兩個壺的初始水量為零,呼叫函式 solve 0 0 開始解題。
let pot t a b =
let rec solve p q =
printfn " -> (%d, %d)" p q
if p = t || q = t then printfn "-------- OK! --------"
else if p = 0 then printf "Fill A full"; solve a q
else if q = b then printf "Empty pot B"; solve p 0
else
printf "Pour A to B"
let x = min p (b - q)
solve (p - x) (q + x)
let rec gcd a b = if b = 0 then a else gcd b (a % b)
if a<1 || b<1 || t<0 || t>a && t>b then printfn "Arg out of range."
else if t % (gcd a b) <> 0 then printfn "No solve!"
else printf "Start with "; solve 0 0
以目標水量 3,兩個壺的容量分別為 5 和 6 為引數呼叫 pot 的結果如下:
> pot 3 5 6;;
Start with -> (0, 0)
Fill A full -> (5, 0)
Pour A to B -> (0, 5)
Fill A full -> (5, 5)
Pour A to B -> (4, 6)
Empty pot B -> (4, 0)
Pour A to B -> (0, 4)
Fill A full -> (5, 4)
Pour A to B -> (3, 6)
-------- OK! --------
相關文章
- 編碼也快樂:兩隻水壺Scheme程式Scheme
- 編碼也快樂:兩隻水壺C#程式C#
- 程式設計也快樂: 兩隻水壺 C程式碼 搜尋版程式設計C程式
- 編碼也快樂:兩水壺的故事之JS程式JS
- 兩隻水壺 c++版C++
- 編碼也快樂:取得3升水C#版C#
- 編碼也快樂活動:撲克牌排序排序
- 編碼也快樂!撲克牌排序JAVA排序Java
- 編碼也快樂:撲克牌排序 - Python排序Python
- 編碼也快樂活動:撲克牌排序(JavaScript)排序JavaScript
- 撲克牌排序(JS版) 編碼也快樂!排序JS
- 程式設計也快樂第3期SQL程式碼程式設計SQL
- 買這家公司的遊戲,還不如買兩瓶快樂水?遊戲
- Tita智慧濾水壺:全家健康飲水靠它就夠了
- 程式設計也快樂第三期解答(四)程式設計
- 程式設計也快樂第三期解答(三)程式設計
- 程式設計也快樂第三期解答(二)程式設計
- 程式設計也快樂第三期解答(一)程式設計
- 編碼也快樂活動歡樂第二季 - 火熱滾燙的HTML5和CSS3大餐...HTMLCSSS3
- 不再做夢,快樂程式碼到此為止!
- 程式設計師快樂器之JAVA程式碼生成工具程式設計師Java
- 程式設計師節快樂程式設計師
- (程式碼生成)JS寫的程式碼生成器-編碼也可以這麼爽..JS
- 米家新電水壺釋出:標準米家風格定價99元
- 小米米家恆溫電水壺釋出:199元帶回家
- 《快樂碼農》第7期 嘗試在帳篷中寫程式碼
- NEON彙編比純C程式碼快17倍!C程式
- 22種程式語言新年快樂
- 使用Google Guava快樂程式設計GoGuava程式設計
- 程式猿1024節快樂
- 程式設計師的快樂生活程式設計師
- 快樂指南:程式設計師版程式設計師
- 《快樂碼農》第5期 大話程式設計師面試程式設計師面試
- 通達信兩隻喜鵲指標公式原始碼副圖指標公式原始碼
- 程式設計師快樂撩妹秀技術兩不誤(行政財務拆分篇)程式設計師
- 如果有一天,可以因為快樂去寫程式碼
- 《快樂碼農》第4期 程式設計師職場水深幾許?程式設計師
- 勞動節快樂!手寫個核心價值觀編碼工具 - Python實現Python