说明
自然数的拆分问题。给定自然数n,将其拆分成若干自然数的和。输出所有解,每组解中数字按从小到大排列。相同数字的不同排列算一组解。
如,读入整数3,分解方案如下:
1+1+1
1+2
再比如,读入整数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
输入数据
一个整数n(n<=20)
输出数据
n可以分解的自然数和的方案
题解
#include <bits/stdc++.h>
using namespace std;
int a[10086]={1},n;
void fj(int s,int u)
{for(int v=a[u-1];v<=s;v++)if(v<n){a[u]=v;s-=v;if(!s){for(int w=1;w<=u-1;w++)cout<<a[w]<<" ";cout<<a[u]<<endl;return ;}elsefj(s,u+1);s+=v;}
}
int main()
{cin>>n;if (n==1){cout<<1;return 0;}fj(n,1);return 0;
}