VBA全排列组合输出

    全排列:简单讲是从N个不同元素中取出M个,按照一定顺序排成一列,通常用A(N,M)表示。当M=N时,称为全排列.

下例展示了展示了{1,"a",3,"c"}这4个数全排列。总的排列数为A(4,4)=4!=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 main()
Dim brr()
N = 0
arr = Array(1, "a", 3, "c") '对arr全排列
Call perm(arr, LBound(arr), UBound(arr), brr)
[A1].Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)
End Sub

结果如下图:

 

猜你喜欢

转载自blog.csdn.net/qq_24499417/article/details/85859464
今日推荐