編程 猴子吃桃問題 猴子第一天摘下若干個(gè)桃子當(dāng)機(jī)吃了一半還不過癮又吃了一個(gè) 以后每天早 編程,猴子吃桃問題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,...
先分析問題:用逆向思維來思考它,根據(jù)題意“ 以后每天早上吃前天剩下的一半零一個(gè) ”,則我們可以用逆向思維來推導(dǎo)它,即從第十天往前推。已知第十天有一個(gè),根據(jù)題意第九天應(yīng)該就是(1+1)*2=4個(gè),第八天應(yīng)該就是(4+1)*2=10, 第七天應(yīng)該就是(10+1)*2=22, 第六天應(yīng)該就是(22+1)*2=46,
依此類推,直至第1天應(yīng)該就是第2天(766+1)*=1534個(gè)桃子,即猴子第一天摘了1534個(gè)桃子。
為了驗(yàn)證這個(gè)推導(dǎo)的正確性,你可以按正常邏輯來把它(即此時(shí)由前往后)推導(dǎo),即由第一天1534個(gè)桃子,第二天就是1534/2-1=766個(gè)桃子,依此類推,直至第十天,那么猴子此時(shí)就會(huì)發(fā)現(xiàn)只剩一個(gè)。
至此,我們由了推導(dǎo)的思想,再來編寫的代碼,就是小菜一碟的事情啦,實(shí)現(xiàn)的它方式無非就是那么兩種,一種是簡單的for循環(huán),另一種是遞歸。這里我采用遞歸,因?yàn)榻鉀Q此類問題往往用遞歸來思考它,會(huì)讓問題變得更簡單。按照數(shù)學(xué)思維來說 就是求未知數(shù),則可以根據(jù)已知數(shù)出發(fā)進(jìn)行求解(那么這里的已知數(shù)已經(jīng)告訴了我們,它說第十天只有一個(gè)桃子)。
下面是我的遞歸算法來求解它的方法:
#include <iostream>
using namespace std;
int recurrent_monkey(int days) //猴子吃桃遞歸
{
int peach;
if (days==10) peach=1; // 遞歸出口條件 (已知條件第10天只有一個(gè)桃子)
else peach=(recurrent_monkey(days+1)+1)*2;
return peach;
}
int main()
{
int days=1;
cout<<recurrent_monkey(days)<<endl;
}
unsigned int peach_counter; //桃子總數(shù)
unsigned int data[10]; //10天每天吃的桃子數(shù)量
unsigned int i;
data[0]=1;
for(i=1;i<10;i++)
{
data[i]=(data[i-1]+1)*2;
if(i==9)
{
peach_counter= data[9];
}
}
第一天摘了1534個(gè)
若干個(gè)
相關(guān)評(píng)說:
晉中市非主: ______ <script> var peachCount = getPeachOfDay(1) console.log("第一天共有桃子數(shù):",peachCount) function getPeachOfDay(day){ if(day == 10){ return 1; } return (getPeachOfDay(day+1)+1)*2; } </script>答案:1534 附::猴子吃桃問題 猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè).第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè).以后每天早上都吃了前一天剩下的一半零一個(gè).到第十天早上在想吃時(shí),就只剩一個(gè)桃子了.求第一天共摘了多少個(gè)桃子?
晉中市非主: ______ int main() { int i,a[11];n",(0天前桃子數(shù)) for(i=2;i< a[0]=1;i天前桃子數(shù)與i-1天前桃子數(shù)關(guān)系 a[i]=2*(a[i-1]+1); printf("%d\//10;i++) //今天桃子數(shù),a[9]); return 0#include<stdio.h>
晉中市非主: ______ 【程序21】 題目:猴子吃桃問題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè) 第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè).以后每天早上都吃了前一天剩下 的一半零一個(gè).到第10天早上想再吃時(shí),見只剩下一個(gè)桃子了.求第一天共摘了多少. 1.程序分析:采取逆向思維的方法,從后往前推斷. 2.程序源代碼: main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/ x2=x1; day--; } printf("the total is %d\n",x1); } 來自C語言程序100例.
晉中市非主: ______[答案] 一開始還以為是數(shù)學(xué)題,剛剛才留意vb二字,匆匆寫了一段代碼,如下: Private Sub Command1_Click() Dim n As Integer Print "第一題摘了" & Tz(n) & "個(gè)桃子" End Sub Private Function Tz(t As Integer) As Integer If t = 10 Then Tz = 1 Else Tz ...
晉中市非主: ______ #include void main() { int peachs=1; for(int i=1; i<10; i++) peachs=(peachs+1)*2; printf("%d",peac...
晉中市非主: ______ main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/ x2=x1; day--; } printf("the total is %d\n",x1); system("pause"); }
晉中市非主: ______ public static void main(String[] args) { int lastday =1; int days = 10;//第十天 for(int i = 1;i<=days;i++){...
晉中市非主: ______ 我也來湊個(gè)熱鬧,利用遞歸算法,得到桃子數(shù)目 將下面程序復(fù)制,建一個(gè)StealPeach.m文件,保存. 輸入StealPeach即可 %函數(shù)StealPeach.m利用遞歸算法求解猴子偷桃問題 %變量說明: % days 只剩下最后一個(gè)桃的天數(shù) % Numbers 第一天...
晉中市非主: ______[答案] yh114long 正解,我加上點(diǎn)注釋吧.public class 猴子吃桃 { //用遞歸算法, static int total(int day){ if(day == 10){ //遞歸終止條件第10天時(shí)剩1個(gè) return 1; } else{ // 比如第10天剩1個(gè)桃子,第9天...
晉中市非主: ______ 編程思想是很重要的,這個(gè)問題就是倒過來考慮的: public class Test{ public static void main(String []args){ int count=1; for(int i=0;i<9;i++) { //每天吃的桃子 count=(count+1)*2; } System.out.println("第一天共摘了"+count+個(gè)桃子); } }