惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
量子位
V
Visual Studio Blog
博客园 - Franky
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
罗磊的独立博客
小众软件
小众软件
V
V2EX
GbyAI
GbyAI
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
月光博客
月光博客
Recent Announcements
Recent Announcements
雷峰网
雷峰网
F
Fortinet All Blogs
M
MIT News - Artificial intelligence

博客园 - laifangsong

请问福州哪里卖打折计算机图书,又可按原价开发票的? 关于目录访问的iis配置问题 福州招聘asp程序员 qq聊天的小秘密 吃鱼引发的问题和中国式管理 为什么点击flash链接到本页面,Request.Referrer将无法获得url来源 观察。总结 - 思想(一) 在csdn上看到奶牛问题,写了下算法 C#(1.1)邮件发送类,功能全面,调用灵活、方便 思考_070614 asp中JMail(4.4)发送邮件 单个文件上传类(可以自定义配置) iis6(win2003)中的aspnet_client和iis5,5.1(win2000,winxp)不一样,系统迁移时一定要注意。 看似诡异的session赋值错误 不错的分页存储过程(转) 矩阵相乘(c) 委托:两个例子(主人仆人、打游戏) 取奇数游戏(c) 汉若塔问题(c)
用递归算法求和为指定值N的所有组合
laifangsong · 2007-01-18 · via 博客园 - laifangsong

/*
 CSDN上最近常常问到这样上面的问题,例如,求所有和为10的组合(组合中的数皆为自然数,且各不相同)
*/
#include 
"stdio.h"
#include 
"conio.h"#define N 10int num[N];

main()
{
    searchJoinNum(

1,N,0); /*调用递归函数*/

    getch();
}

/*
_minNum: 最小的被加的数
_sumLeave: 和的剩余值
_arrCurBound: 存放被加的数的数组当前下标?
*/
searchJoinNum(
int _minNum,int _sumLeave,int _arrCurBound)
{
    
int minNum=_minNum;
    
int sumLeave=_sumLeave;
    
int arrCurBound=_arrCurBound;
    
int i,j=arrCurBound,temp;if(sumLeave==0/*多次减后被减光*/
    {
       output(num); 
/*输出数组,数组元素中不是 NULL 的元素被输出*/

       num[arrCurBound

-1]=NULL; /*清空上次给数组赋的值,返回到上次递归*/
       
return;
    }
if(sumLeave<minNum) /*不够减时,清空上次给数组赋的值,返回到上次递归*/
    {
        num[arrCurBound
-1]=NULL;
        
return;
    }
for(i=minNum;i<N;i++)
    {
       temp
=sumLeave; /*在循环中保留现场*/

       num[j]

=i;
       sumLeave
-=i;

       searchJoinNum(i

+1,sumLeave,j+1); /*在循环中调用递归,参数特点:被加的数字依次增大*/

       sumLeave

=temp; /*返回现场*/
    }

}

output(

int _num[N])
{
    
int i;

    printf(

"%d=",N);
    
for(i=0;i<N;i++)
    {
       
if(_num[i]==NULL)break;
       
if(i!=0)
       {
           printf(
"+");
       }
       printf(
"%d",_num[i]);
    }
    printf(
"\n");
}