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

推荐订阅源

WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
Vercel News
Vercel News
Last Week in AI
Last Week in AI
H
Help Net Security
The Cloudflare Blog
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
B
Blog RSS Feed
云风的 BLOG
云风的 BLOG
I
InfoQ
U
Unit 42
美团技术团队
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
宝玉的分享
宝玉的分享
量子位
博客园_首页

博客园 - 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");
}