A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wc88212 中级黑马   /  2016-8-4 23:58  /  1651 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  • 2、输入两个整数 n 和 sum,从数列1, 2, 3, ... , n 中 随意取几个数,使其和等于 sum,要求将其中所有的可能组合列出来.

    比如n = 5, sum  = 8, 那么所有的组合为:

    3  5 或者 1  5  2 或者 1  4  3



  • [C] 纯文本查看 复制代码
    [/font][/color]
    [*]#include<stdio.h>  
    #include<stdlib.h>  
      
    int length;  
      
    void printResult(int *flag)  
    {  
        int i;  
        for(i=0;i<length;i++)  
        {  
            if(flag[i] == 1)  
                printf("%d ",i+1);  
        }  
        printf(" \n");  
    }  
      
    void getSum(int sum,int n,int *flag)  
    {  
        if(sum < 1 || n < 1)  
            return;  
        if(n > sum)  
            n = sum;  
        if(sum == n)  
        {  
            flag[n-1] = 1;  
            printResult(flag);  
            flag[n-1] = 0;  
        }else{  
            flag[n-1] = 1;  
            getSum(sum - n,n-1,flag);  
            flag[n-1] = 0;  
            getSum(sum ,n-1,flag);  
        }  
    }  
      
    void main()  
    {  
        int sum,n;  
        int *flag;  
        sum = 1;  
        n = 1;  
        length = n;  
        flag = (int*)malloc(length * (sizeof(int)));  
        getSum(sum,n,flag);  
    }  


2 个回复

倒序浏览
不错不错,撸主继续
回复 使用道具 举报
楼主你oc开始了吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马