zoukankan      html  css  js  c++  java
  • (回溯法)和为n的所有不增正整数和式分解算法

    题目:

    利用递归算法输出正整数和为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("
    ");
                }
                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:
    ");
        subSetOfSumN(a,n,1);
        return 0;
    }
  • 相关阅读:
    队列分类梳理
    停止线程
    Docker和Kubernetes
    Future、Callback、Promise
    Static、Final、static final
    线程池梳理
    TCP四次挥手
    http1.0、http1.x、http 2和https梳理
    重排序
    java内存模型梳理
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4456589.html
Copyright © 2011-2022 走看看