#include<stdio.h>
#include<string.h>
long res[1024],Total ;
//n是需要拆分的数,m是拆分的进度。
void fen(long n,long m)
{
long rest ;
//从1开始尝试拆分。
for(long i=1;i<=n;i++)
{
//拆分的数大于或等于前一个,保证不重复。(第一个是0,虚拟的,不计入结果)
if(i>=res[m-1])
{
res[m]=i ;
//将这个数计入结果中。
rest=n-i ;
//剩下的数是n-i。
//如果已经没有剩下的了,并且进度(总的拆分个数)大于1,说明已经得到一个结果。
if(rest==0&&m>1)
{
Total++;
printf("%ld/t",Total);
for(long j=1;j<=m;j++)
{
printf("%ld ",res[j]);
}
printf("/n");
}
else
{
fen(rest,m+1);
//否则将剩下的数进行进度为m+1拆分。
}
res[m]=0 ;
//取消本次结果,进行下一次拆分。
}
}
}
int main()
{
long n ;
printf("Input n:");
scanf("%ld",&n);
memset(res,0,sizeof(res));
Total=0 ;
fen(n,1);
return 0 ;
}