和為定值的多個數 n問題轉化為n 1問題

2021-07-10 12:18:58 字數 793 閱讀 9767

/*

description:

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

方法1:

注意到取n,和不取n個區別即可,考慮是否取第n個數的策略,可以轉化為乙個只和前n-1個數相關的問題。

如果取第n個數,那麼問題就轉化為「取前n-1個數使得它們的和為sum-n」,對應的**語句就是sumofknumber(sum - n, n - 1);

如果不取第n個數,那麼問題就轉化為「取前n-1個數使得他們的和為sum」,對應的**語句為sumofknumber(sum, n - 1)。

《程式設計之法》

參考:

author: jasonzhou

date: 2016-03-15

*/#include

#include

using

namespace

std;

list

list1;

void sumofknumber(int sum, int n)

list1.push_front(n); //典型的01揹包問題

sumofknumber(sum - n, n - 1); //「放」n,前n-1個數「填滿」sum-n

list1.pop_front();

sumofknumber(sum, n - 1); //不「放」n,n-1個數「填滿」sum

}int main()

尋找和為定值的多個數

程式設計求解 輸入兩個整數 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 ...