题目描述
输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复。
输入
输入只有一个整数n,表示待拆分的自然数n。
输出
输出如样例!
示例输入
7
示例输出
1+6 1+1+5 1+1+1+4 1+1+1+1+3 1+1+1+1+1+2 1+1+1+1+1+1+1 1+1+1+2+2 1+1+2+3 1+2+4 1+2+2+2 1+3+3 2+5 2+2+3 3+4
#include<bits/stdc++.h>
using namespace std;
int a[10000];
int print(int n)
{
for(int i=1; i<=n; i++)
{
if(i!=1)
printf("+");
printf("%d",a[i]);
}
printf("\n");
}
int DFS(int n,int ans) //ans表示递归的深度,每一个深度对应 多个表达式,
{
for(int i=1; i<=n/2; i++) //后者大于等于前者
{
if(i>=a[ans-1]) //保证后一个值一定大于等于前一个值
{
a[ans]=i;
a[ans+1]=n-i;
print(ans+1);
DFS(n-i,ans+1);
}
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
a[0]=0;
DFS(n,1);
}
}
..num表示有多少各表达式
#include<bits/stdc++.h>
using namespace std;
int k=0;
int num=0;
int DFS(int x,int y,int ans)
{
if(x<k)
return 0;
num++;
//cout<<x<<"$"<<y<<endl;
for(int i=x; i<=y/2; i++)
{
DFS(i,y-i,ans+1);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
num=0;
for(k=1; k<=n/2; k++)
{
DFS(k,n-k,1);
}
cout<<num;
}
}