参考代码
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100009]={1};
void output(int t)
{
for(int i=1;i<=t-1;i++)
cout<<a[i]<<"+";
cout<<a[t]<<endl;
}
void dfs(int s,int t)
{
for(int i=a[t-1];i<=s;i++)
{
if(i<n)
{
a[t]=i;
s-=i;
if(s==0)output(t);
else dfs(s,t+1);
s+=i;
}
}
}
int main()
{
cin>>n;
if(n==1)cout<<"1"<<endl;
else
dfs(n,1);
return 0;
}
代码解读
-->输入n,如果n=1,那么就输出1,如果不等于1,就深搜都有可能。
-->全局变量深搜,定义s定义t,定义i=数组a[t-1],i小于等于s,i到循环加1。
如果i小于n,数组at等于i,S减等于i。
如果s等于零,打印t,如果不是,深搜s,t+1的所有可能性。
头文件
定义n,定义a数组。
全局变量打印,定义t。
定义i=1,i小于等于t减1,i每次都加1.
输出a[i]&&"+",以及a[t]的返回值。