问题描述:
5只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉。
第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。
第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一份藏起来继续睡觉。
第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。
第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!
请计算一开始最少有多少个香蕉。
这个问题虽然是个填空,我一开始以为就是让求个方程,跑出来个16。然后根据题目描述又重新推导了一遍,发现第五个条件里面少加了个香蕉总数要大于0.
但如果细心做的话,应该不是很难。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int check(int n);
int i;
for(i=0;i<10000;i++)
if(check(i))
break;
cout << i << endl;
return 0;
}
int check(int n)
{
if(n-1<0 || (n-1)%5!=0)
return 0;
n=(n-1) * 4 /5;
if(n-2 < 0 || (n-2)%5!=0)
return 0;
n=(n-2) *4/5;
if(n-3 < 0 || (n-3)%5!=0)
return 0;
n=(n-3) *4/5;
if(n-4 < 0 || (n-4)%5!=0)
return 0;
n=(n-4) *4 /5;
if(n%5!=0 || n-5<0)
return 0;
return 1;
}
答案:3141