• 自然数的拆分


    自然数的拆分(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;

    }

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

  • 相关阅读:
    通过IDEA创建SpringMVC项目记录
    开发问题总结
    idea控制台乱码解决
    java获取文件是否文件夹
    oralce优化文章
    乱码踩坑记录
    oracle关于左连接失效的一些问题
    volatile关键字
    postman body formdata和xwwwformurlencoded区别
    [转][C#]ScottPlot
  • 原文地址:https://www.cnblogs.com/rax-/p/8719879.html
Copyright © 2020-2023  润新知