1. 程式人生 > >如何得到指定數字中任意幾個數字的組合

如何得到指定數字中任意幾個數字的組合

比如1,2,3,4,5,6這六個數字,我想得到它任意5個數字的組合或任意4個數字的組合,該如何得到?

使用遞迴,函式主體如下(il_count為例項變數,僅用於統計,可以不要), mle_1用於輸出結果

//====================================================================
// 函式: w.wf_digui()
//--------------------------------------------------------------------
// 描述:遞迴輸出符合條件的組合
//--------------------------------------------------------------------
// 引數:
//     value    long      al[]        //用來取組合的陣列,如:{1,2,3,4,5,6}
//     value    string    as          //截止到目前為止,已經組合的數字串, 如:123
//     value    long      al_start    //從“用來取組合的陣列”的第幾位開始取,如:為2時,表示從{1,2,3,4,5,6}的2開始
//     value    long      al_num      //從“用來取組合的陣列”中取幾個數字,如:為2時,表示從{1,2,3,4,5,6}中取兩個數字
//--------------------------------------------------------------------
// 返回:  (None)
//--------------------------------------------------------------------
//====================================================================
long ll[], i,j, k
long ll_deal
string ls
//要取的個數為0,則返回
if al_num = 0 then return
//從開始為止al_start開始迴圈直到“用來取組合的陣列”的最後一個數字
for j = al_start to upperbound(al)
    //在迴圈中取1個數字,並將該數字新增到“已經組合的數字串”的後面
    ls = as + string(al[j])
    if al_num = 1 then //如果本次只需要再取1個數字,則取數字完畢,輸出結果(il_count僅用於統計輸出的數目,可以不要)
        il_count ++
        if mle_1.text <> '' then mle_1.text += '~r~n'
        mle_1.text += string(il_count) + '~t:' + ls
    else //如果本次需要取的數字超過1個,則在取得1個數字後,將取數起始位置 + 1,取數個數 -1, 然後遞迴往下取
        //j已經迴圈到底了,這時候還沒達到規定的個數,則返回,表示取不了了
        if j = upperbound(al)  then exit
        wf_digui( al, ls, j + 1, al_num - 1)
    end if
next



呼叫方法如下:

il_count = 0
//引數1:{1,2,3,4,5,6}為“用來取組合的陣列”
//引數2:取出來的數字串的字首
//引數3:從“用來取組合的陣列”的第N個數字開始取
//引數4:需要取幾個數字
wf_digui({1,2,3,4,5,6}, '啊', 1, 3)