输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来

输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
分为两种情况:包含n和不包含n
#include <iostream>
#include <list>
using namespace std;
list<int > listvec;
void find (int sum,int n)
{
       if (sum ==0)
      {
            
             for (list <int>:: iterator iter=listvec .begin(); iter!=listvec .end(); iter++)
            {
                   cout<<*iter <<"+";
            }
             cout<<endl ;
             return;
      }

       if (n==0)
        return;
       if (sum >=n)   //第一种情况m>n,包含n
      {
             listvec.push_back (n);
             find(sum-n,n-1);
             listvec.pop_back ();
      }
      
       find(sum,n-1);// 第二种n没有放进去,不包含n
      
}

int main ()
{
  int sum,n;
  cout<< "please input m=:"<<endl ;
  cin>> sum;
  cout<< "please input n=:"<<endl ;
  cin>> n;
  find( sum,n);
  system( "pause");
       return 0;
}

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页