和為定值得多個數的遞迴求解演算法
阿新 • • 發佈:2019-01-09
題目如下:
輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數,
使其和等於 m ,要求將其中所有的可能組合列出來。分析:
兩個數和為定值的演算法相信大家都知道怎麼做,這道題要求任意數量,仔細思考之後,發現這是典型的0-1揹包問題,利用遞迴迭代,就可以解決問題。<pre name="code" class="cpp">#include<list> #include<iostream> using namespace std; list<int>list1; void find_factor(int sum, int n) { // 遞迴出口 if (n <= 0 || sum <= 0) return; // 輸出找到的結果 if (sum == n) { for (list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++) cout << *iter << " + "; cout << n << endl; } list1.push_front(n); //典型的01揹包問題 find_factor(sum - n, n - 1); //放n,n-1個數填滿sum-n list1.pop_front(); find_factor(sum, n - 1); //不放n,n-1個數填滿sum } int main() { int sum, n; cout << "請輸入你要等於多少的數值sum:" << endl; cin >> sum; cout << "請輸入你要從1.....n數列中取值的n:" << endl; cin >> n; cout << "所有可能的序列,如下:" << endl; find_factor(sum, n); system("pause"); return 0; }