Re: [問題] 排列組合,相同物品分發制不同容器
※ 引述《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
04/16 12:46, 1F
推
04/16 20:18, , 2F
04/16 20:18, 2F
→
04/16 20:29, , 3F
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
04/19 02:46, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 10 之 11 篇):