從m個數中選擇n個數的實現

2021-08-10 13:34:07 字數 1095 閱讀 4017

從m個數中選出n個數來 ( 0 < n <= m) ,要求n個數之間不能有重複,其和等於乙個定值k。求一段程式,羅列所有的可能。 例如備選的數字是:11, 18, 12, 1, -2, 20, 8, 10, 7, 6 。 和k等於:18 那麼組合的可能有:

[18]

[8,10]

[-2,20]

[12,6]

[11,7]

[11,1,6]

[1,10,7]

[12,-2,8]

[12,1,-2,7]

[11,1,-2,8]

解法一、

<?php

$nums = array(11,18,12,1,-2,20,8,10,7,6);

for($i=0;$i<1024;$i++)

if($ans==18)

}echo "]";

}}

解法二、

<?php

/** * 組合列舉

*/function c($arr, $n, &$res, $pre = array())

else

}}// 處理陣列

$arr = array(11, 18, 12, 1, -2, 20, 8, 10, 7, 6, 12, 6, 6, 6, -6 );

$sum = 18; // 條件和值

$count = count($arr);

// 從c(18,1) 迴圈到 c(18,18)

for ($i = 1; $i <= $count; $i++)

}}

解法三、

<?php

function getcombine($arr, $n)

}return array_unique($ret);

}$data = array(11, 18, 12, 1, -2, 20, 8, 10, 7, 6 );

$n = 18;

print_r(getcombine($data, $n));

從n個數中選擇k個數

這是組合問題,組合問題有幾種寫法,且時間複雜度位o n 2 1 暴力迴圈,適用於固定的k 比方從7個數中找兩個數 int main sort nums.begin nums.end int count 0 for int i 0 i nums.size i cout count 2 當前數選不選,遞...

從M個數中選擇前N大的數

如果對m個數字全排列,1 用簡單排序演算法,例如氣泡排序,時間複雜度m m 2 用快速排序 最壞時間複雜度度蛻化為m m 堆排序歸併排序 平均時間負責度為m logm 此處,需要選擇前n大的數,用氣泡排序,迴圈次數為n,時間複雜度為m n 如果是海量資料呢?筆試時經常碰到這樣類似的題目 從100w個...

輸出從n個數中選m個數的所有組合

題目 n個數1,2,n,從這n個數中任意選m個數,輸出所有不同組合,共有c n,m 種不同組合。如n 5,m 3,會產生如下輸出 5 4 3 5 4 2 5 4 1 5 3 2 5 3 1 5 2 1 4 3 2 4 3 1 4 2 1 3 2 1 解題思路1 採用遞迴的方法,終止條件是當m 0時,...