c語言猴子偷桃問題
Ⅰ c語言:猴子分桃
呵呵,最近怎麼一直看到猴子分桃。答案是620~
#include <iostream>
using namespace std;
float superMonkey(int n,int n2)
/**參數說明:n是幾只猴子。n2是最後最遲醒來的猴子擁有的桃數,比如在你的題目最遲醒來的猴子最少最少都要有6個桃子,才能分成五份,再吃掉剩下的一個。**/
{
if (n==1) return n2;
float x;
x = (5 * (superMonkey(n-1,n2)+1))/4;
return x;
}
int main(int argc, char *argv[])
{
for(int i=6; i<=300;i++)
{
cout<<superMonkey(5,i)<<"\n";//5隻猴子,為了找出原先最少必須有幾個,用循環求答案直到找到一個整數。
}
cin.get();
}
/**接下來出現的一堆數字就是一開始的桃數。不能有小數點的,所以要找的是第一個出現的整數。我放300次循環因為我稍微試過了,620是原先必須有的最少桃數(第一個出現的整數就是620啊)。你可以稍微改改,放個檢測整數的函數,就不用看到一堆數字了。還可以該題目成10隻猴子什麼的。**/
Ⅱ 用C語言怎麼做猴子偷桃
#include <stdio.h>
#include <stdlib.h>
int gouzitigui(int n){
printf("xxxxxxxxxxxxx\n");
if(n==1){
return 1;
}else{
return (gouzitigui(n-1)+1)*2;
}
}
int main()
{
int i,n=1;
printf("猴子最初有%d個桃子",gouzitigui(10));
return 0;
}
從題目中可以得出後一天是前一天加1乘以2,
Ⅲ C語言猴子吃桃問題遞歸法
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下
的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
1.程序分析:採取逆向思維的方法,從後往前推斷。
2.程序源代碼:
main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;/*第一天的桃子數是第2天桃子數加1後的2倍*/
x2=x1;
day--;
}
printf("the total is %d\n",x1);
}
==============================================================
Ⅳ 猴子偷桃的問題 演算法
5個猴子摘了一堆桃,第一個猴平均分5份,余出一個,拿走其中一份和多出的一個,第二個猴將剩下的4份平均分成5份,又余出一個.....第5個後又將剩下的4分平均分成5份,多出一個,求最開始至少有多少個桃?(用遞歸演算法)
# include <iostream.h>
int i;
int fentao(int k)
{
if(i==4) return k;
else if(k%5!=1||k%4!=0)
return 0;
else
{
k=k/4*5;
i++;
return fentao(k);
}
}
void main()
{
for(int j=0;j<100000;j++)
{
i=0;
if(fentao(j)!=0)
{
cout<<fentao(j);
break;
}
}
}
看程序應該能明白的吧
實在不好講