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;

    }

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

  • 相关阅读:
    BOM(JavaScript高程笔记)
    初识AJAX
    初识DOM
    《JavaScript DOM 编程艺术》读书笔记
    git/ TortoiseGit 在bitbucket.org 使用证书登陆
    原生JS的对象常用操作总结
    js 判断对象相等
    IE 坑爹的浏览器兼容模式
    Linux+mysql混杂
    前端-CS-04
  • 原文地址:https://www.cnblogs.com/rax-/p/8719879.html
Copyright © 2011-2022 走看看