zoukankan      html  css  js  c++  java
  • 自然数拆分-回溯

    任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。

    输入格式

    待拆分的自然数n。

    输出格式

    输出:若干数的加法式子。

    输入输出样例

    7
    
    7=1+1+1+1+1+1+1
    7=1+1+1+1+1+2
    7=1+1+1+1+3
    7=1+1+1+2+2
    7=1+1+1+4
    7=1+1+2+3
    7=1+1+5
    7=1+2+2+2
    7=1+2+4
    7=1+3+3
    7=1+6
    7=2+2+3
    7=2+5
    7=3+4
    

    题解

    #include <bits/stdc++.h>
    using namespace std;
    int b,r,n,a[1001]={1},s;
    int print(int k){
        printf("%d=",n);
        for(int i=1;i<=k-1;i++)
        {
            
            printf("%d",a[i]);
            printf("+");
        }
        printf("%d
    ",a[k]);
        return true;
    }
    int search(int s,int h)
    {
        for(int i=a[h-1];i<=s;i++)
        {
            if(i<n&&i=k)//这里用n,不用s 
            {
                a[h]=i;
                s=s-i;
                if(s==0)
                {
                    print(h);
                }
                else{
                    search(s,h+1);
                    s=s+i;//加上拆分的数,以便产生所有的可能拆分 
                    //如果不加回来,无法回溯
                }
            }    
            
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        search(n,1);
        return 0;
    }
  • 相关阅读:
    phpstudy下允许所有的目录科访问
    fastadmin怎么自动生成框架目录
    优化数据库
    git操作是出现Username for 'https://github.com':的验证问题
    git上传命令步骤
    mysql 组合两张表
    删除重复的电子邮箱
    Neo4j
    opencv学习笔记(2
    opencv学习笔记(1)
  • 原文地址:https://www.cnblogs.com/TheZealous/p/14301350.html
Copyright © 2011-2022 走看看