|
以前看书的时候模仿了一下,不知道是不是楼主想要的。
- Const A = 10 '原始数据长度
- Const L = 6 '定义排列的个数,
- Const H = 210 'C(4,2)=6!/(3!*(6-3))!=720
- Public Output(), nOut&, mOut&
- Public arrList(), nList& ',组合数组
- Public arrComb(), iComb& '原始数组
- '用于解决不重复字符(字母+数字)的组合
- '参考信息:
- 'http://zh.wikipedia.org/wiki/%E7%B5%84%E5%90%88%E6%95%B8%E5%AD%B8
- 'http://outofmemory.cn/code-snippet/4237/c-pailie-zuhe-suanfa
- '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Sub CombList()
- Dim t
- ReDim arrComb(1 To A) '总元素数组
- ReDim arrList(1 To L) '组合元素数组
- ReDim Output(1 To H, 1 To L) '用于存储组合
- t = Timer
- For iComb = 1 To A
- arrComb(iComb) = Sheet1.Cells(iComb, 1) '原始数据读入数组
- Next
- nOut = 0 '初始化
- Combine_2 A, L
- Sheet2.[A1].Resize(nOut, L) = Output()
- Debug.Print Timer - t
- End Sub
- '主程序
- 'm为总元素数
- 'n为组合元素数
- Sub Combine_2(m, n)
- Dim i& '变量
- If m < n Then Exit Sub '总元素<组合元素
- If n = 0 Then
- Exit Sub '递归出口
- End If
- For i = m To n Step -1
- arrList(n) = arrComb(i) '总元素写入组合
- If n > 1 Then '判断是否是最后一个元素
- Combine_2 i - 1, n - 1 '调用递归
- Else
- nOut = nOut + 1
- '-----输出---------------------
- For mOut = 1 To UBound(arrList)
- Output(nOut, mOut) = arrList(mOut)
- Next
- End If
- Next i
- End Sub
复制代码 |
|