Re: [問題] 排列組合,相同物品分發制不同容器

看板Programming作者 (一卡那亞)時間12年前 (2012/04/16 09:22), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串10/11 (看更多)
※ 引述《bob123 ()》之銘言: : ※ 引述《lovesnake (【忠犬攻一枚】)》之銘言: : : 求標題之演算法 : : 其實就是分堆啦 : : 假設有五個東西,分成三堆有幾種分法這樣 : : 1 1 3 : : 1 2 2 : : 2 1 2 : : 2 2 1 : : 1 3 1 : : 3 1 1 恕刪 看了 bob123 前輩的寫法,我總算搞懂這題是要做什麼了XD 用 haskell 來寫大概像這樣 f :: [ Integer ] -> [ ( Integer , Integer , Integer ) ] f x = [ ( x1 , y1 , z1 ) | x1 <- x , y1 <- x , z1 <- x , (fromInteger (x1 + y1 + z1) :: Int) == (length x)] 因為 length 用的是 Int,而傳入的數值是 Integer,所以要用 fromInteger 轉型 Ghci 下的範例: let x = [1,2..5] f x 結果: [(1,1,3) , (1,2,2) , (1,3,1) , (2,1,2) , (2,2,1) , (3,1,1)] --------------------------------------------------------- 每次 PO 文都會以為在用 vim 而不自覺按下 Esc 跟 i....... --------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.113.131.116

04/16 12:46, , 1F
原來我原本的題目講得很不清楚 Orz Sry
04/16 12:46, 1F

04/16 20:18, , 2F
其實BBS編輯器比較接近nano
04/16 20:18, 2F

04/16 20:29, , 3F
為什麼你特別用了fromInteger?
04/16 20:29, 3F
程式中我宣告 > f :: [ Integer ] -> [ ( Integer, Integer, Integer ) ] 如果不用 fromInteger,會因為下面這段 > ((x1 + y1 + z1 ) :: Int) 而自動把 x1、y1、z1 轉型成 Int,這樣就不符合我的型態宣告了。 如果不做任何形態宣告,的確可以不寫 fromInteger。 它的 type 會是 > f :: [ Int ] -> [ ( Int, Int, Int ) ] ※ 編輯: drm343 來自: 59.113.132.186 (04/17 14:18)

04/19 02:46, , 4F
互相學習而已~叫在下前輩實不敢當Orz...
04/19 02:46, 4F
文章代碼(AID): #1FYtHRgE (Programming)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 10 之 11 篇):
文章代碼(AID): #1FYtHRgE (Programming)