VBA全排列組合輸出

2021-09-07 09:26:27 字數 984 閱讀 4550

全排列:

簡單講是從n個不同元素中取出m個,按照一定順序排成一列,通常用a(n,m)表示。當m=n時,稱為全排列.

下例展示了展示了這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)

end sub

結果如下圖:

排列組合輸出

給定n個數,輸出他們所有排列組合情況。題目比較簡單,直接說思路。每乙個位置的數字都有n種出現情況,如果用陣列來儲存這n個數字,那麼固定其中乙個位置,不斷交換它與其他位置的數字,這能保證這個位置取到n種情況。基於此思想,我們可以用遞迴來或者迴圈來做此題 將陣列看作前n 1個元素與最後乙個元素,不斷交換...

隨機排列組合的輸出

在演算法的書本上描述了這樣的乙個問題 有3個白球,4個黑球,5個藍球,請輸出一共有多少種組合,與此同時,輸出每一種組合的方式。這個問題,我一直都在思考,雖然我知道早已經有了答案。遞迴總是讓我知道自己的蹩腳的邏輯。我的倔強的脾氣讓我一直都在研究,到底應該如何寫這個遞迴的方程式。今天晚上寫了乙個模糊的演...

C 全排列組合演算法

題目描述 給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。輸入描述 輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。輸出描述 輸出這個字串的所有排列方式,每行乙個排列。...