『壹』 一個編程的問題.!
這道題可以這樣分析:
最後一天即第十天剩下的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;
}