這個問題也比較常見,網上方法也很多。 這裡也是用陣列的方法來完成。用到了集合、子集的思想。注釋中詳細說明了。
從m個數中選出n個數來 ( 0 < n <= m), 要求n個數之間不能有重複,其和等於乙個定值k, 求一段程式,羅列所有的可能。
如從 [11, 18, 12, 1, -2, 20, 8, 10, 7, 6] 中取出之和為18的集合,如[11,7][18]等。
<?php
header('content-type: text/html; charset=utf-8');
/*** 從m個數中選出n個數來 ( 0 < n <= m), 要求n個數之間不能有重複,其和等於乙個定值k, 求一段程式,羅列所有的可能。
* @param int $need 定值
* @param array $arr 選取的陣列集合
* @return array 符合的子集合
*/function sel_set($need, $arr)
* 針對其中的元素都有2種狀態1在子集中0不在
* 0=>0 0 0 空集不需要考慮
* 1=>0 0 1 => c
* 2=>0 1 0 => b
* 3=>0 1 1 => b c
* 4=>1 0 0 => a
* 5=>1 0 1 => a c
* 6=>1 1 0 => a b
* 7=>1 1 1 => a b c
* 也就是將每個子集對應的編號轉化為二進位制 再去陣列取對應元素
*///set_arr用來存放符合需求的子集
$set_arr = array();
//set_count個子集,所以迴圈set_count次
for( $i = 1; $i < $set_count; $i++ )
}//判斷當前子集之和是否等於設定的定值,符合則存入set_arr
if( $need == array_sum($tmp) )
}//返回符合要求的集合
return $set_arr;
}//要進行選取的陣列,及定值
$need = 18;
$arr = array(11, 18, 12, 1, -2, 20, 8, 10, 7, 6);
sel_set($need, $arr);
尋找和為定值的多個數
程式設計求解 輸入兩個整數 n 和 m,從數列1,2,3.n 中 隨意取幾個數,使其和等於 m 要求將其中所有的可能組合列出來。include includeusing namespace std 全域性變數 listlist1 從1,2.n找到和為sum的數字 void find factor i...
尋找和為定值的多個數
輸入兩個整數n和sum,從數列1,2,3 n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。注意到取n,和不取n個區別即可,考慮是否取第n個數的策略,可以轉化為乙個只和前n 1個數相關的問題。如果取第n個數,那麼問題就轉化為 取前n 1個數使得它們的和為sum n 對應的 語句就...
陣列 和為定值的多個數
題目描述 給定兩個整數sum和n,要求在1,2,3,n中找到所有和為sum的組合.eg sum 6,n 6 1 2 3 4 5 6 輸出 6 5 1 4 2 3 2 1 分析 使用遞迴的方式考慮,原問題可以分割為在你1,2 n 1中找和為sum n的問題 sumofnumber sum n,n 1 ...