作者zanyking (遙遠的旅人)
看板java
標題Re: [問題] 另一個亂數矩陣的問題
時間Sun Mar 12 23:30:06 2006
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: ※ 引述《zanyking (遙遠的旅人)》之銘言:
: : 其實,如果mean值一定必須得要是4的話,我覺得程式會更好寫。
: : 因為,這樣你的題目就變成:
: : 我有一個8 X 5矩陣,矩陣元素為[0~1],其中0 1必須各佔一半。
: : (平均值一定得要是四,那就表示01各佔一半。)
: : 且每一row 0 or 1都在3~5個之內。
: : 一種解法,就是先求1的每個row的[3,4,5]配方解。
: : 總共有五個row,那麼考慮3 4 5這三個解元素:
: : 1.一個row有4個1,沒有問題。但是若存在一個ROW只有3個1,那就必定有
: : 一個row存在5個1來補。
: : 2.五個ROW可以分成兩個ROW pair解跟一個單一ROW解,這個單一ROW解必定是四個1
: : 3.兩個ROW pair解可以是 35配、53配、44配。
: 你這個演算法,會有點死板
: 如果 max-min > 2,例如 1~7,mean 還是 4
: 產生四組的話,那應該也可以三個 2,一個 6
是的,這就是我在最後說,條件是可以改成比較自由的形式的。
以這一段為例,createRowPair()回傳值的陣列長度可以是變動的。
也就是回傳一個 new int[]{2,2,2,6}給rowAns。
: : createRowPair(),一個數對產生器。可能結果三選一
: : shuffle()。一個陣列攪拌器。就是把陣列攪拌一下
: : cloneArr()。一個陣列複製器。實作可以考慮system.arraycopy()
: 另外,你這樣子還要先產生數對,感覺有點... 累贅?
: 我比較建議用亂述決定 range(介於 0~(max-min)/2)
: 決定 range 之後,依照你的想法,一次決定兩組
: 最後落單的就賞他 mean
: ====
: 如果解讀你的演算法有錯誤,或是思慮不周的
: 還請用力批,不要客氣... [擺茶點]
數對(其實不見得是兩個,依據可能的解集合大小,可以是三個、多個)的產生
,是為了確保rowAns的結果對mean條件能有效的約制。也就是說,將必須有的
單位結果一次性的做出來才不用在後頭煩惱符不符合mean條件。
不過,這樣看起來的話,要改寫成條件比較自由的大概要從簡單的createRowPair
Function 變化成class RowResultCreator了。
}
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.85.116.116
※ 編輯: zanyking 來自: 210.85.116.116 (03/12 23:32)