【递归】拆分自然数
【递归】拆分自然数
题目描述
“天下熙熙,皆为 利来;天下攘攘,皆为利往”,监狱里的暗势力划分地盘的目的无非是为了获取利益,他们分配利益的方式是基于这样一个准则:设总利益为自然数N,则任何一个 大于1的N,总可以拆分成若干个小于N的自然数之和,求出N的所有拆分后选择最合适的一种进行分配,例如当N=3时,有两种划分,即3=1+2和 3=1+1+1。试求出N的所有拆分。
输入
一个整数即N,N<100。
输出
输出每一种划分方案,每种划分方案占一行,最后一行为方案总数。
样例输入
3
样例输出
3=1+1+1
3=1+2
2
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> #include <cstdio> using namespace std; int x[1024] = {0},total = 0,rest,N; void slove(int n, int m){ for (int i = 1; i <= n; i++){ if(i >= x[m - 1]){ x[m] = i; rest = n -i; if (rest == 0 && m > 1){ total++; printf("%d=",N); for (int j = 1; j < m; j++){ printf("%d+", x[j]); } printf("%d\n",x[m]); } else slove(rest, m + 1); x[m] = 0; } } } int main() { int n; scanf("%d",&n); N = n; slove(n,1); printf("%d\n",total); }