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;

    }

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

  • 相关阅读:
    vue.js 条件与循环
    vue.js 声明式渲染
    数据库设计范式?
    用户购物车,实现添加商品的功能!
    用户购物车功能的实现。
    初始ajax技术
    SQL语句中 INNER JOIN的用法!
    商城 用户登录、注册、注销,购物车。
    EL和 JSTL? 在JSP中简化 java代码的写法!
    小数点后保留2位小数的正则表达式
  • 原文地址:https://www.cnblogs.com/rax-/p/8719879.html
Copyright © 2011-2022 走看看