【问题描述】输入自然数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
思路:递归,num[i+1]=num[i]-i(i=1,2,3,n)
代码如下:
#include<iostream>
int num[101]={0};
using namespace std;
void Print(int k)
{
int i;
cout<<num[0]<<"=";
cout<<num[1];
for(i=2;i<=k;i++)
{
cout<<"+"<<num[i];
}
cout<<endl;
}
int split(int k,int n)
{
int i=1;
if(n<=0)
Print(k);
else
{
for(i=1;i<=n;i++)
{
num[k+1]=i;
split(k+1,num[k]-num[k+1]);
}
}
}
int main(void)
{
cin>>num[0];
int i=1;
for(i=1;i<=num[0]/2;i++)
{
num[1]=i;
split(1,num[0]-num[1]);
}
return 0;
}
运行图: