码迷,mamicode.com
首页 > 其他好文 > 详细

数的拆分

时间:2018-08-12 20:14:45      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:clu   整数   microsoft   字典   ace   sof   i++   abs   text   

题目:输入整数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\n",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;
}

 

  

 

数的拆分

标签:clu   整数   microsoft   字典   ace   sof   i++   abs   text   

原文地址:https://www.cnblogs.com/chen-1/p/9463784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!