《程式設計之法》 尋找和為定值的多個數

2021-07-28 22:37:55 字數 972 閱讀 4209

輸入兩個整數n和sum,要求從數列1,2,3,…,n中隨意取出幾個數,使得它們的和等於sum,請將其中所有的可能的組合列出來。

這是個01揹包問題。考慮是否取第n個數的策略,問題可以轉化為乙個只與前n-1個數相關的問題,也就是:

(1)如果取第n個數,那麼問題就轉化為「取前n-1個數使得它們的和為sum-n」

(2)如果不取第n個數,那麼問題就轉化為「取前n-1個數使得它們的和為sum」

這種解法思想和之前部落格裡提到的字串組合所用的解法是類似的。

//

// created by huxijie on 17-3-18.

// 尋找和為定值的多個數

#include

#include

using

namespace

std;

void findsumofk(int sum,int n,list

&result)

//相等則說明加上n之後就等於一開始所求的整數

if (sum == n)

cout

}result.push_front(n);

findsumofk(sum - n, n - 1,result); //加上n,這用前n-1個數來填満sum-n

result.pop_front();

findsumofk(sum, n - 1,result); //不放n,則用前n-1個數來填満sum

}void findsumofk(int sum,int n)

int main()

10

9+18+2

7+37+2+1

6+46+3+1

5+4+1

5+3+2

4+3+2+1

process finished with

exit code 0

《程式設計之法》2 2尋找和為定值的兩個數

題目描述 輸入乙個整數陣列和乙個整數,在陣列中查詢一對數,滿足它們的和正好等於輸入的那個整數,並輸出任一一對值。解法一 直接窮舉 雙層迴圈,複雜度為o n 2 include using namespace std void directenum int nums,int n,int len if ...

程式設計之法 2 2 尋找和為定值的兩個數

輸入乙個整數和乙個整數陣列,在陣列中查詢一對數,滿足他們的和正好是輸入的那個整數,如果有多對數的和等於輸入的整數,輸出任意一對即可。例如,如果輸入陣列 1,2,4,5,7,11,15 和整數15,那麼由於4 11 15,因此表明存在兩個數能相加為15。include include include ...

程式設計之法 面試和演算法心得(尋找和為定值的多個數)

輸入兩個整數n和sum,從數列1,2,3.n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。注意到取n,和不取n個區別即可,考慮是否取第n個數的策略,可以轉化為乙個只和前n 1個數相關的問題。尋找和為定值的多個數 public class searchsomesurevalue ...