• 一个数的拆分问题


    问题描述:将一个正数进行拆分,比如n=3 输出:(1+1+1,1+2,2+1,3)

    这个问题想了一下午才想透,利用递归可以进行解决。使用一个辅助数组来保存每一次递归的值。

    思路如下(输入n=3):

      1、对于第一位的数字,应当从1遍历到3(即n,遍历index设为i),形式如:1+...., 2+.... ,n

      2、对于第二位数字,是n-i这个数的遍历结果(递归)

      3、需要保存下来遍历过程中的因子,便于输出整个中间结果数组

      4、递归停止条件:如果n-i已经等于0,意味着可以打印输出了

    # include <stdio.h>
    # include <stdlib.h>
    # include <malloc.h>
    int total = 0;
    int n;
    int * p = (int *)malloc(n * sizeof(int));//申请n个空间,最大保存所有都是1的情况
    void chf (int a, int m);
    int main (void)
    {
        printf ("请输入一个数:");
        scanf("%d", &n);
        chf (n, 1);
        system("pause");
        return 0;
    }
    void chf (int a, int m) //a是当前要分解的数,0-m是数组输出的位置,也可以说成是递归的深度
    {
        int rest, j, i;
        for (i = 1; i <= a; i++)
        {
            p[m] = i;
            rest = a - i;
    
            if (rest == 0)
            {
                for (j = 1; j < m; j++)
                {
                    printf("%d+", p[j]);
                }
                printf("%d\n", p[m]);
            }
            else
            {
                chf(rest, m +1);
            }
        }
    
    }
  • 相关阅读:
    团队的最佳诠释
    诸葛烤鱼
    Agile Web Development with Rails 读书笔记 (四)
    Agile Web Development with Rails 读书笔记 (三)
    客户教育
    To Be Or Not To Be Is The Question
    [zz]记录一linux命令:xargs
    Ubuntu 12.04 开启 wubi 安装
    [zz]mknod用法以及主次设备号
    [zz]centos下安装KVM方法
  • 原文地址:https://www.cnblogs.com/darknightsnow/p/2713124.html
Copyright © 2020-2023  润新知