zoukankan      html  css  js  c++  java
  • 数的拆分

    题目:输入整数n,输出n的拆分方案,即n=S1+S2+S3+S4+S5......+Sk,且Sn<=S(n+abs(i))啊,按字典序输出。

    数据输入:

    一行一个整数n,1<=n<=20

    数据输出:

    所有拆分方案(见样例)

    输入:

    4

    输出:

    1+1+1+1

    1+1+2

    1+3

    2+2

    4

    total=5

    题解:

    五的拆分如下

    1+1+1+1+1

    1+1+1+2

    1+2+2

    1+4

    5

    可以发现有 "___"的部分是4的拆分

    可以枚举一个i,拆分i和n-i,完成搜索,定义数组num表示拆分出来的数,定义变量surplus表示剩余的值(num[idx-1]<=i<=surplus)

    完整代码如下:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int num[21];
    int n,ans;
    void print(int x)//输出函数
    {
            ans++;//总数加一
            for(int i=1;i<=x-1;i++) printf("%d+",num[i]);
            printf("%d
    ",num[x]);
    } 
    void dfs(int idx,int surplus)
    {
        if(surplus==0)//当剩余值为0时,输出
        {
            if(idx>1) print(idx-1);
        }
        else for(int i=num[idx-1];i<=surplus;i++)//否则枚举i
        {
            num[idx]=i;//赋值
            dfs(idx+1,surplus-i);//深搜
        }
    }
    int main()
    {
        int n;
        scanf("%d",&n);//读入
        num[0]=1;
        dfs(1,n);
        printf("total=%d",ans);//输出总数
        return 0;
    }
    

      

  • 相关阅读:
    检查点(Checkpoint)过程如何处理未提交的事务
    SQL Server代理(4/12):配置数据库邮件
    SQL Server代理(3/12):代理警报和操作员
    hash_multimap
    hash_map
    hash_multiset
    hash_set
    hash 函数
    pair
    multimap
  • 原文地址:https://www.cnblogs.com/chen-1/p/9463784.html
Copyright © 2011-2022 走看看