#include<bits/stdc++.h>
//数的拆分
using namespace std;
int s[21]; //用于储存拆分的凌乱的方案,最后一整行输出
int n,total;
void pr(int d){
++total;
for(int i=1;i<=d-1;++i) cout<<s[i]<<"+";
cout<<s[d]<<endl;
//为了避免最后出现"+"
}
void dfs(int dep,int rest){
if(rest==0){ //最后无剩余才算完全分解
if(dep>1) pr(dep-1);
}else for(int i=s[dep-1];i<=rest;++i){ //i必须大于或等于上一层的值,范围为 [上层值,剩余值] 即 [s[dep-1,rest]
s[dep]=i;
dfs(dep+1,rest-i);
}
}
int main(){
//freopen("decompose.in","r",stdin);
//freopen("decompose.out","w",stdout);
cin>>n;
s[0]=1; //防止数组从左出界
dfs(1,n);
cout<<"total="<<total<<endl;
return 0;
}
深度优先搜索+数的拆分
最新推荐文章于 2023-02-16 19:37:01 发布