求m选n的vb组合算法,最好不是递归实现
求m选n的vb算法,最好不是递归实现,大量数据递归的运算vb里效率相当的低,用来做彩票选号程序,每个结果按照从小到大排列,希望高手指点,结贴即给分! --------------------编程问答-------------------- 这个不需要递归的。直接排列组合就可以了。 --------------------编程问答-------------------- 求具体的代码,谢谢 --------------------编程问答-------------------- 不客气 --------------------编程问答-------------------- 才10分还一上来就要代码。。无语。。 --------------------编程问答--------------------
--------------------编程问答-------------------- 用N层循环~~~ --------------------编程问答-------------------- 这是我以前在广州做的 36选7 南粤风彩 其实,你只要选不重复的随机数即可, 何必要去搞算法 ?
--------------------编程问答-------------------- 大量数据是因为你把开奖记录搞在一起弄得太复杂了!
先不说递归 客户机子稍不好的都会拖累程序
1、压缩下源数据
2、可以使用有自动排列功能的控件 --------------------编程问答-------------------- 没有找到合适的方法,我还是采取循环的方式输出所有组合,m,n没有做成输入参数,直接在循环中指定了,看到一位朋友写的 逐个移位的算法,自己试了一下,未果,望高人能出现 --------------------编程问答--------------------
我要的是输出所有的组合,之前做过一个跟你说的一样也是用随机数,指定返回结果,但不方便统计和筛选 --------------------编程问答-------------------- 提供一个思路,还可以优化...速度不是VB所长,数据过大快不了....
Option Explicit
'获得组合总数
Private Function Total(ByVal m As Long, ByVal n As Long) As Long
Dim i As Long
Dim Result As Double
Result = 1
For i = n To 1 Step -1
Result = Result * m / i
m = m - 1
Next
Total = Result
End Function
'单个组合
Private Sub CarryComb(CombItem As Variant, pComp() As Long, n As Long)
Dim i As Long
i = n
While CombItem(i) = pComp(i)
i = i - 1
Wend
CombItem(i) = CombItem(i) + 1
While i < n
i = i + 1
CombItem(i) = CombItem(i - 1) + 1
Wend
End Sub
'组合结果
Private Sub CombResult(m As Long, n As Long, Result As Variant)
Dim i As Long, j As Long
Dim Num As Long
If n > m Then Exit Sub
ReDim CombItem(1 To n)
ReDim pComp(1 To n) As Long
Num = m - n
For i = 1 To n - 1
CombItem(i) = i
pComp(i) = Num + i
Next
CombItem(n) = n - 1
pComp(n) = m
Num = Total(m, n) ': Debug.Print Num
ReDim Result(1 To Num)
For i = 1 To Num
CarryComb CombItem, pComp, n
Result(i) = Join(CombItem)
'DoEvents
Next
End Sub
Private Sub Command1_Click()
Dim m As Long, n As Long
Dim myResult
m = 35
n = 5
Call CombResult(m, n, myResult)
Debug.Print Join(myResult, vbCrLf)
End Sub
补充:VB , 基础类