如何得到指定數字中任意幾個數字的組合
阿新 • • 發佈:2019-01-31
比如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)