拆分自然数

5人阅读 评论(0) 收藏 举报
分类:

拆分自然数:任何一个大于1的数,总能够拆分成若干个小于n的自然数之和,求出所有拆分后的情况。

递归算法:

#include<stdio.h>

int num[20];

void print(int j)
{
    int i;
    printf("%d = %d ", num[0], num[1]);
    for(i = 2; i <= j; i ++)
    {
        printf("+ %d", num[i]);
    }
    printf("\n");
    return;
}




void split(int k, int m)
{
    int i;
    if(m <= 0)
    {
        print(k);
    }
    else
    {
        for(i = num[k]; i <= m; i ++)
        {
            if(i >= num[k])
            {
                num[k + 1] = i;
                split(k + 1, m - num[k + 1]);
            }
        }
    }
    return;
}



int main(void)
{
    int n, i;
    scanf("%d", &num[0]);
    for(i = 1; i <= num[0] / 2; i ++)
    {
        num[1] = i;
        split(1, num[0] - num[1]);
    }

    return 0;
}


回溯算法:

#include<stdio.h>

int n, num[20];

void print(int k)
{
    int i;
    printf("%d = %d ", n, num[1]);
    for(i = 2; i <= k; i ++)
    {
        printf("+ %d", num[i]);
    }
    printf("\n");
    return;
}



void split(int n, int digit)
{
    int i, remainder;
    for(i = 1; i <= n; i ++)
    {
        if(i >= num[digit - 1])
        {
            num[digit] = i;
            remainder = n - i;
            if(remainder == 0 && digit > 1)
            {
                print(digit);
            }
            else
            {
                split(remainder, digit + 1);
            }
            num[digit] = 0;
        }

    }
}


int main(void)
{
    scanf("%d", &n);
    split(n, 1);
    return 0;
}




查看评论

【在线峰会】人工智能核心技术解析与应用实战

人工智能在线技术峰会是CSDN倾力打造、旨在为领域内技术爱好者了解国内外相关公司及科研机构最新研发动态和应用案例实践分享的课堂。
  • 2017年05月16日 16:52

自然数拆分问题

#include#includelong res[1024],Total ;//n是需要拆分的数,m是拆分的进度。void fen(long n,long m){    long rest ;    ...
  • banzhiyu
  • banzhiyu
  • 2007-05-07 22:44:00
  • 2139

(c)自然数的拆分问题(回溯 递归)

  • yjbbrqw0401
  • yjbbrqw0401
  • 2009-08-24 13:26:00
  • 1270

自然数的拆分问题(递归)

#include"stdio.h" void fun(int n,int k) { static int s[50]; if(n==0) { int j; for(j=0;j printf("%-2d...
  • oWuGuanFengYue123
  • oWuGuanFengYue123
  • 2013-10-28 20:54:24
  • 1091

qduoj-36 自然数拆分 (高效深搜)

Problem 36: 自然数拆分 Time Limit:1 Ms| Memory Limit:128 MB Difficulty:2 Description 输入自然数n,然后将其拆分成...
  • u012628310
  • u012628310
  • 2014-03-19 21:48:56
  • 1143

自然数的拆分(深度优先搜索)

Description 任何一个大于1的自然数总可以拆分成若干个自然数之和。  1:4=1+1+1+1  2:4=1+1+2  3:4=1+3  4:4=2+2  5:4=4  Input 输入...
  • chrisblogtk
  • chrisblogtk
  • 2016-04-08 21:42:36
  • 387

搜索与回溯5.3——自然数拆分

题目说明 任何一个大于1的自然数总可以拆分成若干个自然数之和。 例: 1:4=1+1+1+1 2:4=1+1+2 3:4=1+3 4:4=2+2 5:4=4 var n,l...
  • SSL_QYH0Ice
  • SSL_QYH0Ice
  • 2016-11-24 16:11:09
  • 235

搜索与回溯 自然数的拆分

【例5.3】自然数的拆分时间限制: 1000 ms        内存限制: 65536 KB提交数: 687     通过数:427 【题目描述】任何一个大于1的自然数n,总可以拆分成若干个小于n的...
  • sdz20172133
  • sdz20172133
  • 2018-02-26 21:15:47
  • 25

SDUT 1263 自然数的拆分

题目描述 输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复。 输入 输入只有一个整数n,表示待拆分的自然数n。 输出 输出如样例! 示例输入 7 示例输出 1...
  • qq_36459536
  • qq_36459536
  • 2017-12-16 10:28:11
  • 79

拆分自然数的几种算法.doc

  • 2011年10月21日 16:21
  • 29KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 7491
    积分: 635
    排名: 7万+
    文章存档