‘壹’ 一个编程的问题.!
这道题可以这样分析:
最后一天即第十天剩下的1个桃子是第九天吃剩的,可知第九天有桃子(1+1)*2 即4个桃子,而第九天的桃子也是第八天吃剩的 则第八天有桃子(((1+1)*2)+1)*2 即10个 依此类推。。。。。。
可以用递归来解决:F(1)=1 F(2)=(F(1)+1)*2 F(3)=2*(F(2)+1) ......
用Java编写一个方法:
public int monkey(int n){
if(n==1)
return 1;
else
return 2*(monkey(n-1)+1);
}
下面是完整的实例:
public class Test {
public static void main(String[] args) {
System.out.println("第一天有桃子 "+monky(10)+"个");
}
public static int monky(int n){
if(n==1)
return 1;
else
return 2*(monky(n-1)+1);
}
}
‘贰’ C语言作业:用递归法怎么做猴子摘桃知道的大哥大姐帮帮忙!
猴子摘桃问题
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?
#include<stdio.h>
intgetPeachNumber(n){
intnum;/*定义所剩桃子数*/
if(n==10)
return1;/*递归结束条件*/
else{
num=getPeachNumber(n+1)*2+2;/*递归*/
printf("第%d天所剩桃子%d个 ",n,num);/*天数,所剩桃子个数*/
}
returnnum;
}
intmain(void){
intnum=getPeachNumber(1);
printf("猴子第一天摘了%d个桃子。 ",num);
getch();/*屏幕暂留*/
return0;
}
运行结果
‘叁’ 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
}
-------------------------------------
#include<stdio.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
}
‘肆’ 猴子偷桃用递归怎么解
使用数组的方法为:
#include "stdafx.h"
int main(int argc, char* argv[])
{
int a[10],i,j;
a[0]=1;
for(i=1;i<10;i++)
{
a[i]=(a[i-1]+1)*2;
}
printf("一共有桃子的个数为:%d",a[9]);
return 0;
}
用递归的方法为:
#include "stdafx.h"
int fun(int y)
{
int m;
if(y==1) return
m=1;
else
m=(fun(y-1)+1)*2;
return m;
}
int main(int argc, char* argv[])
{
int a=10;
b=fun(a);
printf("一共有桃子的个数为:%d",b);
return 0;
}
本人不会用链表进行编写!
‘伍’ C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一
#include<stdio.h>
intn;//n作为全局变量
intpeach(intx)//表示第x天有几个桃子
{
if(x<n)//如果x不是最后一天,那么这一天桃子的数量等于明天桃子数加1再乘以2
return2*(peach(x+1)+1);
elseif(x==n)//如果是最后一天,返回1
return1;
else
return-1;//异常
}
intmain()
{
scanf("%d",&n);//输入题目中的n
printf("%d ",peach(1));
return0;
}
请采纳。
‘陆’ C语言作业:用递归法怎么做猴子摘桃知道的大哥大姐帮帮忙,我自己想破脑袋想不出来!
#include <stdio.h>
const unsigned int &fun_last(const int &n,const int &day)
{
if(n<0) return -1;
if(day==1) return n;
return fun_last(2*(n+1),day-1); //当天剩n个,前一天剩下2*(n+1)个
}
int main(void)
{
int day=10,n=1;
printf("第一天摘下%d个桃子\n",fun_last(n,day));
return 0;
}
‘柒’ 编程 猴子吃桃问题 猴子第一天摘下若干个桃子当机吃了一半还不过瘾又吃了一个 以后每天早
先分析问题:用逆向思维来思考它,根据题意“以后每天早上吃前天剩下的一半零一个”,则我们可以用逆向思维来推导它,即从第十天往前推。已知第十天有一个,根据题意第九天应该就是(1+1)*2=4个,第八天应该就是(4+1)*2=10,第七天应该就是(10+1)*2=22,第六天应该就是(22+1)*2=46,
依此类推,直至第1天应该就是第2天(766+1)*=1534个桃子,即猴子第一天摘了1534个桃子。
为了验证这个推导的正确性,你可以按正常逻辑来把它(即此时由前往后)推导,即由第一天1534个桃子,第二天就是1534/2-1=766个桃子,依此类推,直至第十天,那么猴子此时就会发现只剩一个。
至此,我们由了推导的思想,再来编写的代码,就是小菜一碟的事情啦,实现的它方式无非就是那么两种,一种是简单的for循环,另一种是递归。这里我采用递归,因为解决此类问题往往用递归来思考它,会让问题变得更简单。按照数学思维来说 就是求未知数,则可以根据已知数出发进行求解(那么这里的已知数已经告诉了我们,它说第十天只有一个桃子)。
下面是我的递归算法来求解它的方法:
#include<iostream>
usingnamespacestd;
intrecurrent_monkey(intdays)//猴子吃桃递归
{
intpeach;
if(days==10)peach=1;//递归出口条件(已知条件第10天只有一个桃子)
elsepeach=(recurrent_monkey(days+1)+1)*2;
returnpeach;
}
intmain()
{
intdays=1;
cout<<recurrent_monkey(days)<<endl;
}
‘捌’ 用递归函数解决猴子吃桃桃问题。问题描述如下:有一堆桃子不知其数,
#include<stdio.h>
int N; //吃到N天还没吃时,剩1个,全局变量
int funn(int n)
{
if(n==N)
return 1;
else
return 2*funn(++n)+2;
}
int main()
{
int days,y;
printf("输入多少天后剩一个\n");
scanf("%d",&N);
for(days=1;days<=N;days++)
{
y=funn(days);
printf("days%d\t%d\n",days,y);
if(y<0)
{
printf("有误");
break;
}
}
}
N=10,days1=1534
‘玖’ 用递归函数解决猴子吃桃桃问题。问题描述如下
依据题意f(n - 1) = f(n)/2 - 1 下一天等于是前一天吃了一半还多一个剩下的。
所以f(n) = 2 * f(n - 1) + 2
例如:第m天剩余10个桃子,吃掉一半加一个得到4个,此时下天是4个桃子,接着吃掉一半加一个得到1个,再下一天是1个桃子。
long peachs(int n)
{
if (n <= 0) //不合法返回0
return 0;
if (n == 1) //第n天 f(1)
return 1;
return 2 * peachs(n - 1) + 2; //n天前的桃子数等于n-1天前的桃子数的两倍加2
//f(n) = 2 * f(n - 1) + 2;
}