描述
将一个数字 n 分拆成 m 个正整数的和(m < n),按照字典序输出。
(1、1、3)(1、3、1)(3、1、1)是相同的分拆方法。
输入描述 两个正整数 n,m。(5 <= n <= 20)
输出描述 按照字典序输出所有分拆方法,每个方法一行。
加上个数的判断即可。
#include <bits/stdc++.h>
using namespace std;
int s[30],n,sum,m;
void dfs(int len,int x){
if(sum==n&&len==m+1){
for(int i=1;i<len;i++){
cout<<s[i]<<" ";
}
cout<<endl;
return;
}
for(int i=x;i<=n;i++){//按照严格升序
if(sum+i<=n){
s[len]=i;
sum+=i;
dfs(len+1,i);
sum-=i;
}
}
}
int main(){
cin>>n>>m;
dfs(1,1);
}