题目描述
任何一个大于1的自然数n,
总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
输入描述
输入n。
输出描述
按字典序输出具体的方案。
样例
输入
7
输出
1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+1+5 1+2+2+2 1+2+4 1+3+3 1+6 2+2+3 2+5 3+4
代码
#include<bits/stdc++.h>
using namespace std;
int n,a[1005]={1};
void dfs(int k,int s){
if(s==0){
for(int i=1;i<k-1;i++){
printf("%d+",a[i]);
}
printf("%d\n",a[k-1]);
return ;
}
for(int i=a[k-1];i<=s;i++){
if(i<n){
a[k]=i;
dfs(k+1,s-i);
a[k]=0;
}
}
}
int main(){
cin>>n;
dfs(1,n);
return 0;
}
自然数7的拆分方法及输出要求
1813

被折叠的 条评论
为什么被折叠?



