【递归】拆分自然数

【递归】拆分自然数

题目描述

“天下熙熙,皆为 利来;天下攘攘,皆为利往”,监狱里的暗势力划分地盘的目的无非是为了获取利益,他们分配利益的方式是基于这样一个准则:设总利益为自然数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
#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
",x[m]);
            }
            else slove(rest, m + 1);
            x[m] = 0;
        }

    }
}
int main()
{
   int n;
   scanf("%d",&n);
   N = n;
   slove(n,1);
   printf("%d
",total);
}
View Code
原文地址:https://www.cnblogs.com/cshg/p/5641798.html