求正整數n所有可能的和式的組合

2021-06-10 00:37:10 字數 846 閱讀 8740

求正整數n所有可能的和式的組合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)

首先說一下,群裡面很多人在問這個東東怎麼去列印,當然如果是只求組合個數的話,他就是乙個完全揹包的問題,如果要列印的話,那還真的費一番功夫。

我們可以將這題想為乙個找零錢問題,以前找零錢問題是,我們有1元、2元、5元、10元面值的紙幣,現在我有20元錢,問有多少種找法。

這個找零錢如果將面值擴充套件為1元、2元、3元....20元,那麼就剛好是我們這道題了。

請看我另一篇blog《找零錢遞迴》

我直接貼**如下:

#include #include using namespace std;

#define max_value 10

int next[max_value] = ;

void segnum(int nsum, int* pdata, int ndepth)

int i = (ndepth == 0 ? next[0] : pdata[ndepth-1]);

for(; i <= nsum;) }

void showresult(int array,int nlen)

測試**如下:

int main()

//找零錢測試

showresult(array,max_value);

system("pause");

return 0;

}

測試結果如下:

求正整數n所有可能的和式的組合

題目 給定乙個數字n,求解出所有和為n的整數組合,要求組合按照遞增方式展示,而且唯一。分析 最初看到這個題,沒有什麼特別好的思路,後來看了下別人的帖子,其實問題也沒那麼難,採用遞迴的方式進行求解,比如我們需要計算和為4的所有組合,我們首先將小於等於4的所有數字列出來 1,2,3,4 首先選取第乙個數...

求正整數n所有可能的和式的組合

問題背景 求正整數n所有可能的和式的組合 如 4 1 1 1 1 1 1 2 1 3 2 1 1 2 2 對於這個題目有兩種理解了 一 如果將1 1 2和2 1 1當成不同的序列的話,這個問題會相對容易些。拿n 4這個例子,首先最長的組合肯定是4 1 1 1 1,那麼最短的組合是4 4,到最後可能會...

求正整數n所有可能的和式的組合

題目 給定乙個數字n,求解出所有和為n的整數組合,要求組合按照遞增方式展示,而且唯一。分析 最初看到這個題,沒有什麼特別好的思路,後來看了下別人的帖子,其實問題也沒那麼難,採用遞迴的方式進行求解,比如我們需要計算和為4的所有組合,我們首先將小於等於4的所有數字列出來 1,2,3,4 首先選取第乙個數...