首页 > 试题广场 >

有5只猴子在海边发现一堆香蕉,决定第二天来平分,第二天清晨,

[单选题]
有5只猴子在海边发现一堆香蕉,决定第二天来平分,第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了。第2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份,问这堆香蕉至少有少只?
  • 3121
  • 3211
  • 3321
  • 3111
假设香蕉的总数是n只,那么第一只猴子分出香蕉后还剩下((n-1)-(n-1)/5)只香蕉
剩下4只猴子要平均分这堆香蕉而且还扔掉了一根,所以(((n-1)-(n-1)/5)-1)/5得到的是一个整数 所以选A
发表于 2015-09-24 10:54:34 回复(0)
public class Test1 {

public static void count(){

int n=0;
int temp=0;
int a[]=new int[4];
a[0]=3121;
a[1]=3211;
a[2]=3321;
a[3]=3111;
for(int i=0;i<a.length;i++){
if((a[i]-1)%5==0){
n=a[i];
temp=(a[i]-1)/5*4;
a[i]=temp;//第二只猴子拿到的香蕉个数
if((a[i]-1)%5==0){
temp=(a[i]-1)/5*4;
a[i]=temp;//第三只
if((a[i]-1)%5==0){
temp=(a[i]-1)/5*4;
a[i]=temp;//第四只
if((a[i]-1)%5==0){
temp=(a[i]-1)/5*4;
a[i]=temp;//第五只
if((a[i]-1)%5==0){
System.out.println("香蕉的个数是:"+n);
}
}
}
}
}
}
}
public static void main(String[] args) {
count();
}
}
发表于 2015-09-24 18:44:32 回复(0)
function a(n, m){
    //每次拿走之后剩余num
    var num = n-1-(n-1)/5;
    m--;
    if( m > 0 ){
        //每次拿走的香蕉都能被5整除
        if( (n-1)%5 == 0 ){
            return a( num, m );
        }else{
            return "不符合";
        }
    }else{
        return "符合";
    }
}
alert( a(3121, 5) ); //符合
alert( a(3211, 5) ); //不符合
alert( a(3321, 5) ); //不符合
alert( a(3111, 5) ); //不符合

编辑于 2015-09-24 15:56:03 回复(0)
public class test {
	public static void fun() {
		int y5, y4, y3, y2, y1, i = 1;//y
		while (true) {
			y5 = 5 * i + 1;
			if (y5 % 4 == 0) {
				y4 = (y5 / 4) * 5 + 1;
				if (y4 % 4 == 0) {
					y3 = (y4 / 4) * 5 + 1;
					if (y3 % 4 == 0) {
						y2 = (y3 / 4) * 5 + 1;
						if (y2 % 4 == 0) {
							y1 = (y2 / 4) * 5 + 1;
							System.out.println(i);
							System.out.println(y1);
							break;
						}
					}
				}
			}
			i++;
		}
	}

	public static void main(String[] args) {
		fun();
	}
}

发表于 2015-09-23 20:54:44 回复(0)
由题可知:an = 4/5 * (an-1 - 1)
很像等比数列,所以把式子构造成: a n + 4 = 4/5 * (a n-1  + 4
第五只猴子为: a 5  + 4  = (4/5)4 * (a 1  + 4
也就是说 (a 1  + 4 )/625 为整数
所以只有A选项符合
发表于 2015-09-23 20:35:37 回复(0)
A
public class Demo {
public static void main(String[] args) {
int number;
int count = 0;
int i;
for (i = 6;; i = i + 5) {// i = 16
number = i;
// 如果数变化,应该重新计算。
count = 0;// number = 11
while ((number - 1) % 5 == 0) {
count++;
number = (number - 1) / 5 * 4;// 表示拿走了一份,只剩下4份。//number=8
if (count == 5) {
// 跳出循环。
break;
}

}
if (count == 5) {
break;
}

}
System.out.println(i);
}

}
发表于 2015-09-23 20:34:25 回复(0)
输出y1为3121
编辑于 2015-09-23 10:37:37 回复(0)
A
#include <iostream>
int main()
{
	int n,k=1,current_app=0;//n代表猴子的个数,k代表每次分配n份后,多余的香蕉数,current_app代表每次分完走之后香蕉数
	bool flag = false;
	std::cin >> n;
	int j = 1;//j代表最后一个猴子分配之后,每份的个数,最少从1开始
	for (;;j++)
	{
		current_app = n*j + k;
		for (int i = 1; i < n; i++)
		{	
			if (current_app % (n-1) == 0)
			{
				current_app = current_app * n / (n - 1) + k;
			}
			else
			{
				break;
			}
			if (i == n-1)
			{
				flag = true;
				break;
			}
		}
		if (flag == true) 
		{
			break;
		}
	}
	std::cout << current_app << " " << j << std::endl;
	system("pause");
	return 0;
}

发表于 2015-09-23 09:41:39 回复(0)
为什么算的没有答案

发表于 2015-09-23 09:29:25 回复(0)
有负数个香蕉
-4 只香蕉

猴子的智商怎么能分3000多个香蕉
就算人分完也清晨变中午了

所以采用空头支票方式借概念香蕉4只
编辑于 2015-04-23 02:18:41 回复(0)
假设第5只猴子拿走了a只香蕉,则之前剩余5a+1只香蕉,于是第4只猴子拿之前剩5*((5a+1)/4)+1=(25a+9)/4只香蕉,第3只猴子拿之前剩余5*(((25a+9)/4)/4)+1=(125a+61)/16,第2只猴子拿之前剩余5*(((125a+61)/16)/4)+1=(625a+369)/64,第1只猴子拿之前剩余5*(((625a+369)/64)/4)+1=(3125a+2101)/256只,即总数为(3125a+2101)/256只香蕉,由于香蕉只数为整数,将结果带入得A满足条件
发表于 2015-03-04 16:13:09 回复(0)
选A
最后的结果一定是整数,假设总数是X那么第一个猴子剩下0.8X-0.8个,第二个剩下0.8(0.8X-0.8-0.8个,以此类推第5个猴子剩下0.8(0.8(0.8(0.8( 0.8X-0.8 -0.8)-0.8)-0.8)-0.8个
整理得0.85X-0.85-0.84-0.83-0.82-0.8,带入A选项结果为整数

发表于 2014-12-23 15:21:21 回复(0)