zoukankan      html  css  js  c++  java
  • 自然数的拆分

    自然数的拆分(decompose)

    题目描述

    任何一个大于 1  的自然数 n ,总可以拆分成若干个小于 n  的自然数之和。

    输入

    一个整数 n

    输出

    多行,拆分方案,按字典序输出。

    样例输入

    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

    **#include<cstring>

    #include<cmath>

    #include<iostream>

    #include<algorithm>

    using namespace std;

    int n,sum = 0,s = 0;

    int a[10001];

    int printf()

    {

             for(int i = 1;i <= s;i++)

             {

                      printf("%d ",a[i]);

                      if(i <= s - 1) printf("+");

             }

             printf(" ");

    }

    int search(int m)//m表示位数

    {

             for(int i = a[m - 1];i < n;i++)//可保证每一位数都比后一位数要小

             {

                      s++;//此时数组中有几个数

                      a[m] = i;

                      sum = sum + a[m];

                      if(sum < n) search(m + 1);  //满足要求继续搜索

                      if(sum == n) printf();  //如果满足等式就输出

                      sum = sum - a[m];

                      s--;

             }

    }

    int main()

    {

             freopen("decompose.in","r",stdin);

             freopen("decompose.out","w",stdout);

             scanf("%d",&n);

             a[0] = 1;

             search(1);

             return 0;

    }

    ***回溯,保证前面那位小于后面的那位。

  • 相关阅读:
    springboot整合swagger2+跨域问题
    springboot整合日志+多环境配置+热部署
    springboot整合多数据源以及多数据源中的事务处理
    springboot整合jsp
    springboot整合freemarker
    SpringBoot的全局异常处理
    python之多进程记录
    使用python批量造测试数据
    python之global用法
    Jenkins构建从github上克隆时,报Host key verification failed.
  • 原文地址:https://www.cnblogs.com/rax-/p/8719879.html
Copyright © 2011-2022 走看看