思路:题目要求是拆分后的序列中的数字从小到大排序,要求输出字典序较小的序列。所以我在for循环的最小值就用上一位的值,然后搜索回溯,
#include<bits/stdc++.> using namespace std; const int maxn=10; int n; int ans[maxn]; void dfs(int sum,int cnt) { int i; if(sum==n){ for(i=0;i<cnt-1;i++){ cout<<ans[i]<<"+"; } cout<<ans[i]<<endl; return ; } for(i=max(ans[cnt-1],1);i<n;i++){ if(sum+i<=n){ ans[cnt]=i; sum+=i; dfs(sum,cnt+1); sum-=i; } } } int main() { int i,j,d; cin>>n; dfs(0,0); return 0; }