输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数

本文转自:http://blog.csdn.net/zz198808/article/details/7566352

 

输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来。
 
代码:
  1. // FindSum.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include<list>     
  6. #include<iostream>     
  7. using namespace std;    
  8.   
  9. list<int>list1;    
  10. void find_factor(int sum, int n)     
  11. {    
  12.     // 递归出口     
  13.     if(n <= 0 || sum <= 0)    
  14.         return;    
  15.   
  16.     // 输出找到的结果     
  17.     if(sum == n)    
  18.     {    
  19.         // 反转list     
  20.         list1.reverse();    
  21.         for(list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++)    
  22.             cout << *iter << " + ";    
  23.         cout << n << endl;    
  24.         list1.reverse();        
  25.     }    
  26.   
  27.     list1.push_front(n);      //典型的01背包问题     
  28.     find_factor(sum-n, n-1);   //放n,n-1个数填满sum-n     
  29.     list1.pop_front();    
  30.     find_factor(sum, n-1);     //不放n,n-1个数填满sum      
  31. }    
  32.   
  33. int main()    
  34. {    
  35.     int sum, n;    
  36.     cout << "请输入你要等于多少的数值sum:" << endl;    
  37.     cin >> sum;    
  38.     cout << "请输入你要从1.....n数列中取值的n:" << endl;    
  39.     cin >> n;    
  40.     cout << "所有可能的序列,如下:" << endl;    
  41.     find_factor(sum,n);    
  42.     system("pause");  
  43.     return 0;    
  44. }   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值