求正整数n所有可能的和式的组合。
比如5分解如下:
5
4 1
3 2
3 1 1
2 2 1
2 1 1 1
1 1 1 1 1
void findadd(int n,int big,int sum,int *a,int k) //数组a保存最大值为big的组合
{
if(sum==n) //找到合法的,输出
{
for(int i=0;i<k;i++)
cout<<a[i]<<' ';
cout<<endl;
return;
}
else if(sum>n)
return;
for(int i=big;i>0;i--)
{
a[k++]=i;
findadd(n,i,sum+i,a,k);
k--;
}
}
void Find(int n)
{
int sum=0;
int *a=new int[n];
int k=0;
findadd(n,n,sum,a,k);
delete []a;
}