任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
输入
输入:待拆分的自然数n。
输出
输出:若干数的加法式子。
样例输入
7
样例输出
1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+1+5 1+2+2+2 1+2+4 1+3+3 1+6 2+2+3 2+5 3+4
#include<cstdio>
int n,m;
int a[50000];
int vis[5000];
void func(int step,int x)
{
if(x==0)
{
if(step==2)
{
return;
}
for(int i=1;i<step-1;i++)
{
printf("%d+",a[i]);
}
printf("%d\n",a[step-1]);
return;
}
else
{
for(int i=1;i<=x;i++)
{
if(i>=a[step-1])
{
a[step]=i;
func(step+1,x-i);
}
}
}
}
int main()
{
scanf("%d",&n);
m=n;
func(1,m);
}