//标题描述的有点错误,应该是:输入两个整数n和m,从1、2...n中随意选出几个数,使和等于m
#include<iostream>
using namespace std;
void calFun(int m,int n,int* count,int* box,int nval)
{
if(m<1||n<1) return;
if(n==m)
{
box[n]=1;
for(int i=nval;i>=1;i--)
{
if(box[i]) cout<<i<<" ";
}
*count=*count+1;
cout<<endl;
box[n]=0;
calFun(m,n-1,count,box,nval);
}
else
{
box[n]=1;
calFun(m-n,n-1,count,box,nval);
box[n]=0;
calFun(m,n-1,count,box,nval);
}
}
void main()
{ int m,n;
cin>>m>>n;
if(m<n) n=m;
int* box=new int[n+1];
memset(box,0,(n+1)*sizeof(int));
int* count=new int(0);
calFun(m,n,count,box,n);
cout<<"共"<<*count<<"种方法!"<<endl;
delete[] box;
delete count;
}