C语言 猴子分桃问题。求用递归函数解
代码和分析如下:
公司主营业务:成都网站设计、网站制作、外贸营销网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出宜章免费做网站回馈大家。
#includestdio.h
int n,k,t=0; // t代表分配的次数,n只猴子,k个桃子
bool fun(int m)
{
if(m=k) return false; //如果当前猴子可分配的桃子少于k个,返回false
if(m%n != k) return false; //如果当前的桃子%n !=k,返回false
t++; //当前猴子可分配桃子
if(t=n) return true; //分配了n次,满足条件退出
if(!fun(m-k-m/n)) return false; // 下一个猴子可以分m-k-m/n只桃子
return true; //以上条件都满足,返回true
}
int main()
{
scanf("%d%d", n, k);
if(n==1) {printf("%d",1+k); return 0;} // 如果只有1只猴子,直接输出,退出
for(int i=1i++)
{
t = 0; //每次循环重新计数
int m = n*i + k; //不要直接让m从1开始循环。反正m肯定%n ==k
if(fun(m))
{
printf("%d", m);
break;
}
}
return 0;
}
测了几组数据,比如2个猴子1个桃子,就是7。上述程序对于只有1个猴子的时候有问题,但是将m只桃子分成1等份剩余k个这样是否有意义呢?
如果有的话,那么如果只有一只猴子,直接输出1+k就可以了。
C语言猴子吃桃递归法
一个猴子摘了一些桃子,它每天吃了其中的一半然后再多吃了一个,
直到第10天,它发现只有1个桃子了,问它第一天摘了多少个桃子?
猴子分N天吃完了桃子,要想求出第1天的桃子数,就先要求出第2天的桃子数,.......因此,有:
a1=(a2+1)*2;
a2=(a3+1)*2;
a3=(a4+1)*2;
......
a9=(a10+1)*2;
a10=1;
现在就知道了算法,我们可以用递归来求解:
int qiu(int a,int n)
{
if(n==1) a=1; //第10天就只剩1个了
else a=(a(n-1)+1)*2; //前一天总比后1天多一半加1
}
-------------------------------------
#includestdio.h
int qiu(int a,int n);
main(){
int zuih=1,tians=10;//最后一天的个数,天数
long sum;
sum=qiu(1,10);
printf("di yi tian you %ld ge.\n"):
}
int qiu(int a,int n)
{
if(n==1) a=1; //第10天就只剩1个了
else a=(a(n-1)+1)*2; //前一天总比后1天多一半加1
}
C语言递归问题 猴子吃桃
你不应该在被调函数中定义m=1 不然当你反复调用被调函数是 m都会被重新赋值。
我的程序:
#include stdio.h
int sb(int,int);
int main( )
{
int n;
scanf("%d",n);
printf("The monkey got %d peachs in first day.\n",sb(1,n));
return 0;
}
int sb(int m,int n)
{
if(m==n)
return 1;
else
return 2*(sb(m+1,n)+m);
}
C语言猴子吃桃问题递归法
/*猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。*/
/*第二天又将剩下的桃子吃掉一半,又多吃了一个。*/
/*以后每天都吃前一天剩下的一半零一个。*/
/*到第10天在想吃的时候就剩一个桃子了*/
/*问第一天共摘下来多少个桃子?*/
#include stdio.h
#include stdlib.h
#include conio.h
/*第n天所剩桃子数*/
int getPeachNumber (int n) {
int num; /*定义所剩桃子数*/
int i=0;
if (n==10)
return 1; /*递归结束*/
else {
num = getPeachNumber(n+1)*2 + 2; /*递归*/
printf("第%d天:%d个桃子\n", n, num); /*第n天剩num个桃子*/
}
return num;
}
int main (void) {
int num;
puts ("每天剩余的桃子数:");
num = getPeachNumber (1);
putchar ('\n');
puts ("================================================================");
putchar ('\n');
printf("猴子第一天摘了%d个桃子!\n", num);
putchar ('\n');
getch (); /*屏幕暂留*/
return 0;
}
运行结果
网页标题:猴子问题递归函数c语言 用递归方法解决猴子吃桃问题python
标题来源:http://scyingshan.cn/article/ddghcjd.html