题意:任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
【输入】
输入n。
【输出】
按字典序输出具体的方案。
思路:经典dfs枚举1-n每个数,用k来减,到0输出,否则继续。
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
int a[100],b[100],c[100],d[100][100],ans=0,n;
void print(int q)
{
ans++;
cout<<n<<"=";
cout<<a[1];
for(int i=2;i<=q;i++)
{
if(a[i]!=0)
{
cout<<'+'<<a[i];
}
}
cout<<endl;
}
void ba(int k,int q)
{
for(int i=1;i<=k;i++)
{
a[q]=i;
if(k-i==0) print(q);
else ba(k-i,q+1);
}
}
int main()
{
cin>>n;
ba(n,1);
//cout<<"total="<<ans;
}
结果······
n=7时应输出:
7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1