標題:
[發問]
排列組合題目(1~10的所有組合)有大大能破解嗎?
[打印本頁]
作者:
PKKO
時間:
2016-7-17 16:49
標題:
排列組合題目(1~10的所有組合)有大大能破解嗎?
各位先進大家好
小弟最近在研究排列組合
想請教各位大大
若想要從1~10個號碼裡面跑完所有的排列組合
10取1~10取10
一共會產生出1,023個組合,算法如下方
For I = 1 To 10
x = x + Application.Combin(10, I)
Next
但這1,023個組合要如何才能產生出來呢?
請問哪位大大有辦法破解嗎?
作者:
PKKO
時間:
2016-7-18 11:18
小弟提供拙見,下列是10取4的方式
但要如何從10取1到10取10?
總不能寫了下方的程式碼,然後寫十遍吧= =?
Sub 排列組合_不重複()
Dim ar(), br(), x&, y&, z&, n&
ReDim br(1 To Application.Combin(10, 4), 1 To 4)
ReDim ar(1 To 10, 1 To 1)
For i = 1 To 10
ar(i, 1) = i
Next
For w = 1 To UBound(ar) - 3
For x = w + 1 To UBound(ar) - 2
For y = x + 1 To UBound(ar) - 1
For z = y + 1 To UBound(ar)
n = n + 1
br(n, 1) = ar(w, 1)
br(n, 2) = ar(x, 1)
br(n, 3) = ar(y, 1)
br(n, 4) = ar(z, 1)
Next
Next
Next
Next
Range("a2").Resize(n, 4) = br
MsgBox "操作完成,共生成" & n & "個組合"
End Sub
複製代碼
作者:
stillfish00
時間:
2016-7-18 15:12
本帖最後由 stillfish00 於 2016-7-18 15:15 編輯
回復
2#
PKKO
1~1023 用二進位看, 各bit bit=1為取 , bit=0為不取
Sub ListCombination()
Dim pools, poolCnt As Integer
pools = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
poolCnt = UBound(pools) - LBound(pools) + 1
Dim i, j, arResult
ReDim arResult(1 To 2 ^ poolCnt - 1, 1 To 10)
For i = 1 To 2 ^ poolCnt - 1
For j = 0 To poolCnt - 1
If i And 2 ^ j Then arResult(i, j + 1) = pools(j)
Next
Next
Sheets.Add.[a1].Resize(UBound(arResult), UBound(arResult, 2)) = arResult
End Sub
複製代碼
作者:
PKKO
時間:
2016-7-18 17:07
回復
3#
stillfish00
S大您好,非常感謝您的協助
已經多次得到您的幫忙,感激不盡!
程式碼小弟先拜讀一下^_^
作者:
stillfish00
時間:
2016-7-19 09:13
回復
3#
stillfish00
更正一下
ReDim arResult(1 To 2 ^ poolCnt - 1, 1 To 10)
應該為
ReDim arResult(1 To 2 ^ poolCnt - 1, 1 To
poolCnt
)
作者:
PKKO
時間:
2016-7-19 11:49
回復
5#
stillfish00
沒問題!
那邊是預先建立放置資料的陣列
感謝您的細心!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)