呵呵,最近怎么一直看到猴子分桃。答案是620~
#include
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<
cin.get();
}
/**接下来出现的一歼樱堆数字就是一开始的桃数。不能有小数点的,所以要找的是第一个出现的整数。我放300次循环因为我稍微试过了,620是原先必须有帆野的最少桃数(第一个出现的整数就是620啊)。你可以稍微改改,放个检测整数的函数,就不用看到一堆数字了。还可以该题目成10只猴子什么的。**/
猴子偷桃
设桃子总数为peach,第一只猴子分得桃子为x1,第二只猴竖键子为x2……第五只猴晌御子为x5
peach= 5 * x1 +1;
4 * x1 = 5 * x2 +1;
……
4 * x4 = 5 * x5+ 1;
4(x1 +1) = 5(x2 + 1), 4(x2 + 1) = 5(x3 +1)..., 4(x4 +1) = 5(x5 +1)
所以由 (x1 +1) = (5/余谨巧4)^4 * (x5 +1)推出
--> (x5 +1) = (4/5)^4 * (x1+1)
(x5 + 1) =(x1+1)*256/625,由于整数,令 x1 +1=625,则x1=624;
那么x5 +1=256,x5=255;
x2=499;
x3=399;
x4=319;
peach= 5 * x1 +1=3121
楼上的是错的,正确的答案是3121
手工验算一个,又派拆不难的!
#include
//判断能否被合理的手羡分配
int divide(int n,int m)
{
if(n/5==0 || n%5!=1)
{//不足5个或不能分5份多1个,分配失败
return 0;
}
if(m==1)
{//分到最后尘薯枣一个猴子,说明能分配成功
return 1;
}
return divide(n-n/5-1,m-1);
}
main()
{
int n;//桃子数量
for(n=1;;n++)
{
if(divide(n,5))
{//判断能否被合理的分配
printf("%d\n",n);
break;
}
}
}
买一本脑筋急转弯吧,学校门口有卖的