全排列:
簡單講是從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之間。輸出描述 輸出這個字串的所有排列方式,每行乙個排列。...