| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 829 人关注过本帖, 1 人收藏
标题:“放苹果问题”好多地方看不懂诶,求大神帮我解释下,谢谢
只看楼主 加入收藏
守护靖
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2013-7-10
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:8 
“放苹果问题”好多地方看不懂诶,求大神帮我解释下,谢谢
#include <stdio.h>
int cmn(int m,int n)
{
    static int j=0,cont=0,pre=0;//为什么要定义静态全局变量,可以换下吗?
    int i;
    if(m&&n==j+1)//这个语句看不懂?可以换个简单的吗?
        cmn(0,n); //执行这个语句是什么意思?
    else if(m)
    for (i=pre; i<=m-i; i++)
    {
        pre=i;
        j++;
        cmn(m-i,n);
        j--;
    }
    else
        cont++;
    return cont;
}

void main()
{   
    int M,N;
    scanf("%d%d",&M,&N);
    printf("%d\n",cmn(M,N));
}
//求大神们帮我解释下这个程序是怎么执行的?谢谢
搜索更多相关主题的帖子: include return 苹果 
2013-07-18 10:59
丶弱水彡千
Rank: 5Rank: 5
来 自:地狱十九层
等 级:职业侠客
威 望:2
帖 子:203
专家分:369
注 册:2013-6-16
收藏
得分:0 
虽然我看懂了是递归函数  but  我也是个新手没法解释 呵呵

这个怎么玩
2013-07-18 13:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
连啥叫“放苹果问题”都不解释,让别人看个球呀?
以前也有一个鸟人,上来就问“小白兔问题用C语言怎么写”,别人问它啥叫小白兔问题,它就泼口骂人。
2013-07-18 13:22
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
在自定义函数体里面定义的变量不是全局变量而是局部变量吧,if语句的判断语句够简单了,还能怎么改,这是递归调用,总结:我不知道这段代码想干嘛,所以看不懂

思考赐予新生,时间在于定义
2013-07-18 13:43
守护靖
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2013-7-10
收藏
得分:0 
回复 2楼 丶弱水彡千
.把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?M, N为自然数。说明:如有7个苹果,2个盘子,则(5, 1, 1)和(1, 5, 1)和(1, 1, 5)都是同一种分法。
 
输入描述
第一行一个整数表示数据的组数(多组数据),对于每组数据第一行是苹果个数M (1 ≤ m ≤ 100) ,第二行是盘子个数N(1 ≤ n ≤ 100)。
 
输出描述
每组数据输出一行,放苹果的方法个数。
 
输入样例
1
3
2
输出样例
2
//好吧,我错了,这个就是您要的题目,希望您能尽快解答,小人急用,再次感谢。
2013-07-18 15:36
zjl12006
Rank: 2
等 级:论坛游民
帖 子:6
专家分:26
注 册:2011-3-7
收藏
得分:0 
7个苹果,两个盘子,怎么有(5,1,1)、(1,5,1)、(1,1,5)这种组合
2013-07-18 16:25
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
收藏
得分:9 
/* Note:Your choice is C IDE */
#include <stdio.h>
int cmn(int m,int n)
{
    static int j=0,cont=0,pre=0;//为什么要定义静态全局变量,可以换下吗?
//这里是静态局部变量,不是全局,因为这个变量是在函数里面的,不可换,为什么呢?静态可以锁住值,就是改变后会保存起来,动态的不行。
    int i;
    if(m&&n==j+1)//这个语句看不懂?可以换个简单的吗?你看换成这样看的懂吗?if(m&&(n==j+1))按照优先级别来看,就不会错。
/*意思是n是否等于j+1;如果是,这整个(n==j+1)就等于一,否则等零,然后在进行与预算,例如m=3,n=2,j=1;这条语句就是说2是否等于j+1;很明显是,所以(n==j+1)
为1;即真,然后3&&1;即为真,然后if条件就成立,*/
        cmn(0,n); //执行这个语句是什么意思?这句就是调用语句,即调用int cmn(int m,int n),
    else if(m)
    for (i=pre; i<=m-i; i++)
    {
        pre=i;
        j++;
        cmn(m-i,n);
        j--;
    }
    else
        cont++;
    return cont;
}

void main()
{   
    int M,N;
    scanf("%d%d",&M,&N);
    printf("%d\n",cmn(M,N));
}
收到的鲜花
  • 守护靖2013-07-18 17:01 送鲜花  1朵   附言:我很赞同

加油加油!
2013-07-18 16:41
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
收藏
得分:1 
回复 6楼 zjl12006
他的意思是说不考虑排列,只是考虑组合。意思就是说这三种算一种。

加油加油!
2013-07-18 16:44
守护靖
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2013-7-10
收藏
得分:0 
回复 7楼 蔡梓锋
谢谢,解释得很详细。懂了。
2013-07-18 17:04
快速回复:“放苹果问题”好多地方看不懂诶,求大神帮我解释下,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018644 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved