我打的公式是這樣的 參考看看
跑出來好像都對 但是最後一筆g3很容易出現 1 或 35極端值
可能是亂數參雜了前後條件的關係式 變成不是機率相同的亂數了
c3=MAX(1,ROUND(RAND()*35,0))
d3=MAX(1,ROUND(RAND()*35,0))
e3=MIN(90-1-1-SUM(C3:D3),MAX(90-35-35-SUM(C3:D3),
MAX(1,ROUND(RAND()*35,0))))
f3=MIN(90-1-SUM(C3:E3),MAX(90-35-SUM(C3:E3),MAX(1,ROUND(RAND()*35,0))))
g3=90-SUM(C3:F3)
※ 引述《hsiyun (小黃)》之銘言:
: 軟體:
: excel
: 版本:
: 2010
: 我有一個 35列 5行 的矩陣 如下所示
: C D E F G H I J K L M
: 3
: 4
: 5
: 6
: .
: .
: 37
: 每一行的資料都是 1~35的亂數,每一列加總都要是90
: 我參考版上有關亂數的資料
: B2 =1
: C1:G35 = rand()
: H38 =sum(H3:H37) 再複製公式到 H38:L38
: M3 =sum(H3:L3) 再複製公式到 M3:M37
: H3 =IF($B$2,IF($M3+H$38=720,H3,RANK(C3,C$3:C$37))) 再複製公式到 H3:L37
: M2 =IF(COUNTIF(M3:M37,90)=35,"成功","未成功")
: 最後再用VBA寫個按鈕,讓他自動更新到跑出結果
: Sub Macro()
: Application.ScreenUpdating = False
: Do While Range("M2").Value = "未成功"
: Calculate
: Loop
: Application.ScreenUpdating = True
: End Sub
: 我用過同樣的邏輯在一個5列 3行的矩陣中測過,可以算出答案
: 但是在原本 35列 5行 的case要跑非常久
: 我覺得可能是因為沒有甚麼特別演算法,
: 就是讓他靠運氣跑到一組剛好符合條件的答案
: 不曉得版上的先進有沒有更好的方法解決這個問題呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.105.197