看板 Office 關於我們 聯絡資訊
我打的公式是這樣的 參考看看 跑出來好像都對 但是最後一筆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