一直做梦的猫

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

编程求解:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。
用递归的方法进行求解

#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) 
 
    { 
 
        // 反转list 
 
        list1.reverse(); 
 
        for(list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++)  
 
            cout << *iter << " + "; 
 
        cout << n << endl; 
 
        list1.reverse();     
 
    } 
 
       
 
    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); 
 
    int t;
 
    cin>>t;
 
    return 0; 
 
}

  

posted on 2013-05-04 18:31  一直做梦的猫  阅读(156)  评论(0)    收藏  举报