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;
    }
  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/TheZealous/p/14301350.html
Copyright © 2011-2022 走看看