VB有难度的问题(数组+排列组合),高手进

来源:百度知道 编辑:UC知道 时间:2024/05/12 05:00:13
问题:
有M个元素的数组,取出任意N个元素(N>=1 and N<=元素总数)的全组合!
要求:function过程,两个参数:(数组,N)N表示要用N个元素参与组合

本人菜鸟,请尽量注释,谢谢

举例:
如数组a=array(a,1,2,f),N=2 时 全部组合如下:
a1
a2
af '注,只组合不排列,af 和 fa 算一个
12
1f
2f

N=3时全部组合:
a12
a1f
a2f
12f

我自己想了一夜,仍然没有解决,感觉要多重循环,但是N值不定,所以不知道要循环 几重 ,难住了!

在窗体上添加一个按钮

代码如下

Private Sub Command1_Click()
AutoRedraw = True
Dim a
Dim i As Integer, j As Integer
Dim M As Integer, L As Integer
Dim mp() As Integer
Dim s(), sp As Integer
Dim nsp As Double

a = Array("a", "1", "2", "f")
M = 2

'从a中选M个元素组合,注意a是字符串数组,最好要用引号

L = UBound(a)

If M > L + 1 Then
MsgBox "M不能超过" & L + 1
Exit Sub
End If

ReDim mp(M - 1)
nsp = 1
For i = 1 To M
nsp = nsp * (L + 2 - i)
nsp = nsp / (M + 1 - i)
Next
Print "共有" & nsp & "种组合"
ReDim s(CLng(nsp))
For i = 0 To M - 1
mp(i) = i
s(0) = s(0) & a(mp(i))
Next

sp = 1
Do Until arrM(mp, M, L) = False
DoEvents
For i = 0 To M - 1
s(sp) = s(sp) & a(mp(i))
Next
sp = sp + 1
Loop

For