码迷,mamicode.com
首页 > 编程语言 > 详细

(回溯法)和为n的所有不增正整数和式分解算法

时间:2015-04-25 22:26:10      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

利用递归算法输出正整数和为n的所有不增的正整数和式。例如当n=5时,不增的和式如下:

5=5

5=4+1

5=3+2

5=3+1+1

5=2+2+1

5=2+1+1+1

5=1+1+1+1+1

形如这种求子集的问题都可以采用回溯法来解决,回溯法即一种加上剪枝判断的递归算法。

解决问题的关键词:不增

代码实现如下:

数组a用来保存分解出来的和数,即某个分解的集合

sum表示需要分解的数

k表示要分解的第k个和数

#include <iostream>
#include <stdio.h>

using namespace std;

#define N 100

void subSetOfSumN(int a[],int sum,int k){
    for(int i=sum;i>=1;i--){
        if(i<=a[k-1]){
            a[k]=i;
            if(i==sum){
                printf("%d=%d",a[0],a[1]);
                for(int p=2;p<=k;p++)
                    printf("+%d",a[p]);
                printf("\n");
            }
            else
                subSetOfSumN(a,sum-i,k+1);
        }
    }
}

int main()
{
    int n,a[N];
    printf("Please input an integer n(1<=n<=20):");
    scanf("%d",&n);
    a[0]=n;
    printf("The result of nonDescend integer factorization is:\n");
    subSetOfSumN(a,n,1);
    return 0;
}

(回溯法)和为n的所有不增正整数和式分解算法

标签:

原文地址:http://www.cnblogs.com/AndyJee/p/4456589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!