將乙個數m分解成n個數之和的所有可能

2021-09-26 18:26:09 字數 769 閱讀 7164

週末的時候,師兄提了乙個小學生的題目,然後這個題目自我估計,反正我是做不出來的。然後師兄想用計算機的方法,寫個**看能不能把這個問題解答出來,於是就找了一下我這個菜雞一起討論(題目就不貼了,樓主感覺小學生過的好難啊),最後師兄表示他在乙個問題上卡住了,簡化之後問題是這樣的:有n個數,他們之和為m,這些組合有多少種可能性,並將這些可能性列出來。用迴圈的話,這個鬼知道要套多少層迴圈,解決方案就是用遞迴(ps:遞迴真的是乙個好東西,可是辣雞樓主遞迴用得並不好)。參考了大佬的乙個部落格,修改了一下**,得到了這個解決方案(遞迴這種東西,是真的要好好學呀!)。

照例,放上參考的大佬部落格:

接下來是菜鳥自己寫的對於這個問題的解決方案:

#include "iostream"

#include "vector"

#include "algorithm"

using namespace std;

vectorrecord;

vector> result;

void print()

/*n是個數,m是總數,本函式的目的是得到n個數相加和為m的所有情況

考慮下來,可以採用遞迴的思想

*/void func(int n, int m)

return;

}for (int beg =  1; beg <= m -2 ; ++beg)

}int main()

採用的資料結構是vector,畢竟他可以好用啊。好了,以上短短的**就能解決乙個比較麻煩的迴圈巢狀問題,遞迴真是太好用了,不多說了,我要滾去學遞迴了。

將乙個整數 M 分解成 K 個數之和的方法數

記錄乙個遇見的問題,關於將乙個整數 m 分解成 k 個數之和 1,首先 k 個數不能有 0 如果有 0 也很簡單啊,將問題進一步分解成 將整數 m 分解成 k 1 個數之和 以此類推一直到分解成 1 個數之和,所有相加就可以得出數量 2,對於順序顛倒不算,比如將 3 分解成 2 個數之和,可以分成 ...

將乙個偶數分解成質數之和

目標 將乙個偶數,分解成質數之和。public class disintegrateevennumber 判斷乙個正整數是否是質數 public static boolean isprimenum int inputnum else return result 判斷是否是乙個偶數 public st...

將乙個數分解成多個加數相加的形式

看到這個命題首先想到的是暴力遞迴,除了這個辦法看起來好像沒有更好的辦法。不知道是不是。舉個栗子 比如 4 首先想到的是1 1 1 1,來抽象一下,數字n,它的所有組合情況一定是這樣的 1 f n 1 2 f n 2 3 f n 3 n 1 f 1 哈哈,有沒有看到一絲規律呢,其實遞迴退出條件都被你看...