题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
输入格式
输入n。
输出格式
按字典序输出具体的方案。
输入样例 复制
7
输出样例 复制
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
#include<bits/stdc++.h>
using namespace std;
int n,a[1005];
void d(int x,int y)
{
if(x==0)
{
if(y==2)
return;
cout<<n<<'=';
for(int i=1;i<y-1;i++)
cout<<a[i]<<'+';
cout<<a[y-1]<<endl;
return;
}
for(int i=a[y-1];i<=x;i++)
{
a[y]=i;
d(x-i,y+1);
}
}
int main()
{
a[0]=1;
cin>>n;
d(n,1);
return 0;
}