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

T3——拆分自然数

时间:2020-06-09 16:15:58      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:pre   out   space   oid   class   sea   图片   print   iostream   

技术图片

 

 

 

 

 

#include<iostream>
#include<cstdio>
using namespace std;

int a[105];//以数组的的形式记录拆分,便于接下来的搜索与回溯 
bool b[100]={0};
int n;
int tot=0;

void search(int,int);
void print(int);

int main(void)
{
    freopen("Distribution.in","r",stdin);
    freopen("Distribution.out","w",stdout);
    
    scanf("%d",&n);
    search(1,n);
    printf("%d",tot);
}

void print(int g)//输出函数
// 
{
    printf("%d=",n);
    cout<<a[1];
    for(int i=2;i<=g;i++)
        printf("+%d",a[i]);
    cout<<\n;
}
void search(int x,int y)//search表示我们在小于 y 的范围内选取第 x 个数字
//选取数字规则按照字典序
//所以我们优先选小的数字 每个数字必须小于或者等于前一个数字 
//依次递归可得
//当我们选取当前数字之后将y的范围缩小防止
//以后与我们之前选择的数列重复
//之后输出方案数++ 
{
    for(int i=1;i<=n;i++)
    {
        if(i==n) break;
        if(i>=a[x-1]&&i<=y) 
        {
            a[x]=i;
            if(y-i==0) print(x),tot++/*Copy(x,tot)*/;
            else search(x+1,y-i);
        }
    }
}

 

 

-end-

 

T3——拆分自然数

标签:pre   out   space   oid   class   sea   图片   print   iostream   

原文地址:https://www.cnblogs.com/-Iris-/p/13073005.html

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