|
发表于 2014-3-2 19:57
|
显示全部楼层
本楼为最佳答案
本帖最后由 香川群子 于 2014-3-2 20:12 编辑
唯一的要求:B列中 5个数的组合 必须从小到大排序。
我的代码中,生成全组合部分的代码是最高效的。大家学习一下。- Sub kagawa()
- Dim i&, j&, k&, l&, m&, n&, r&, s$, t$, tms#
- tms = Timer
-
- m = 11
- ReDim a(2 ^ m - 1, 2): k = 0
- For i = 1 To m
- k = k + 1: a(k, 0) = 1: a(k, 1) = Right("0" & i, 2)
- For j = 1 To k - 1
- k = k + 1: a(k, 0) = a(j, 0) + 1: a(k, 1) = a(j, 1) & " " & Right("0" & i, 2)
- Next
- Next
-
- Set d = CreateObject("Scripting.Dictionary")
- For k = 1 To 2 ^ m - 1
- d(a(k, 1)) = k
- Next
-
- n = 5
- arr = [b1].CurrentRegion
- For l = 2 To UBound(arr)
- trr = Split(" " & arr(l, 1))
- ReDim b$(2 ^ n - 1): k = 0
- For i = 1 To n
- t = trr(i)
- k = k + 1: b(k) = t: r = d(t): a(r, 2) = a(r, 2) + 1
- For j = 1 To k - 1
- k = k + 1: s = b(j) & " " & t: b(k) = s: r = d(s): a(r, 2) = a(r, 2) + 1
- Next
- Next
- Next
-
- a(0, 0) = "个数": a(0, 1) = "分解组合": a(0, 2) = "次数"
- [e1].Resize(2 ^ m).NumberFormat = "@"
- [d1].Resize(2 ^ m, 3) = a
- [d1].Resize(2 ^ m, 3).Sort [f2], 2, [d2], , 1, [e2], 1, 1
- [f1].End(4).Offset(1, -2).Resize(2 ^ m, 3) = ""
- MsgBox "耗时: " & Format(Timer - tms, "0.000s") & vbCr & "分解组合结果: " & [f1].End(4).Row - 1
- End Sub
复制代码 |
评分
-
查看全部评分
|