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=1;;i++)
{
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语言猴子吃桃递归法一个猴子摘递归函数c语言算桃子了一些桃子,它每天吃递归函数c语言算桃子了其中递归函数c语言算桃子的一半然后再多吃了一个,
直到第10天,它发现只有1个桃子了,问它第一天摘了多少个桃子?
猴子分N天吃完了桃子,要想求出第1天的桃子数,就先要求出第2天的桃子数,.......因此,有:
a1=(a2+1)*2;
a2=(a3+1)*2;
a3=(a4+1)*2;
......
a9=(a10+1)*2;
a10=1;
现在就知道了算法,递归函数c语言算桃子我们可以用递归来求解:
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语言猴子吃桃问题递归法/*猴子第一天摘下N个桃子递归函数c语言算桃子,当时就吃递归函数c语言算桃子了一半 , 还不过瘾 , 就又多吃递归函数c语言算桃子了一个 。*/
/*第二天又将剩下的桃子吃掉一半,又多吃了一个 。*/
/*以后每天都吃前一天剩下的一半零一个 。*/
/*到第10天在想吃的时候就剩一个桃子了*/
/*问第一天共摘下来多少个桃子递归函数c语言算桃子?*/
#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个桃子递归函数c语言算桃子!\n", num);
putchar ('\n');
getch (); /*屏幕暂留*/
return 0;
}
运行结果
C语言递归桃子个数int peachNum(int day)
{
if (day == 10) return 1;
else return (peachNum(day + 1) + 1) * 2;
推荐阅读
- 门店手机快递怎么收费,手机店可以寄快递吗
- 两个路由器怎么放两个屋子,家里两个路由器怎么一起用
- oracle视图导出为sql,oracle 导出视图数据 plsql
- 地学gis和测绘gis的区别,gis和测绘的区别和联系
- java弹窗设计代码 javaswing弹窗
- c语言中变量的字符串,c语言字符串类型变量
- obs直播教程的简单介绍
- python中聚类的函数 python 聚类函数
- 苹果升级ios14怎么样,苹果升级ios14好吗