Problem Description
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
Input
输入有多组数据,对于每组数据就一个数n。
Output
对于每组输入输出n的拆分方法。
Sample Input
4
Sample Output
1+1+1+1 1+1+2 1+3 2+2
//难理解的递归
#include<iostream>
#include<cstdio>
using namespace std;
int split(int m,int n)
{
if(m==0 || n==1)
return 1;
else if(m<n)
return split(m,m);
else
return split(m-n,n)+split(m,n-1);
}
int main()
{
int t,n;
cin>>t;
while (t--)
{
cin>>n;
printf("%d\n",split(n,n));
}
return 0;
}
//简单递归
#include<iostream>
using namespace std;
int a[110];
int n;
void print(int k)
{
printf("%d=", n);
for (int i = 0; i < k - 1; i++)
printf("%d+", a[i]);
printf("%d\n", a[k - 1]);
}
void split(int x,int n,int k)
{
if (n == 0)
{
if (k == 1)
return;
print(k);
}
else
{
for (int i = x; i <= n; i++)
{
a[k] = i;
split(i, n - i, k + 1);
}
}
}
int main()
{
while (cin>>n)
{
split(1, n,0);
}
return 0;
}