從多個數中取出之和等於定值的組合

2021-06-21 22:51:21 字數 1181 閱讀 5605

這個問題也比較常見,網上方法也很多。 這裡也是用陣列的方法來完成。用到了集合、子集的思想。注釋中詳細說明了。

從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 ...