有4组不同的5胆码数据,进行排列组合,总共24组,代码如下:
Dim N '用于增加动态数组下标
Sub perm(arr, k, m, brr()) '全排列
'arr为需要全排列的数组。k为数组下标,m为上标,brr为存放结果的数组
Dim i As Integer
If k > m Then
N = N + 1
For i = 0 To m
ReDim Preserve brr(1 To m + 1, 1 To N)
brr(i + 1, N) = arr(i)
Next i
Else
For i = k To m
Call swap(arr, k, i)
Call perm(arr, k + 1, m, brr())
Call swap(arr, k, i)
Next i
End If
End Sub
Sub swap(arr, i, j) '数据交换
Dim t
t = arr(i)
arr(i) = arr(j)
arr(j) = t
End Sub
Sub main0159()
Dim brr()
N = 0
arr = Array("01259", "04356", "12789", "34678") '对arr全排列
Call perm(arr, LBound(arr), UBound(arr), brr)
[A1].Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)
End Sub
代码执行后,发现没有0这个数据,如图A1E24所示。请教一下怎么修改?H,K,N列的数据再次组合,要求每个组合里面不能含有同一组5胆,如O,P,Q,R列所示,实现该功能?请教各位老师帮忙,万分感谢!