黑马程序员技术交流社区
标题:
猴子分桃的问题
[打印本页]
作者:
闫镜湾
时间:
2014-5-24 00:41
标题:
猴子分桃的问题
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
作者:
Sevenette
时间:
2014-5-24 00:45
。。。用递归 话说怎么感觉你在刷屏
作者:
北极£莜蓝
时间:
2014-6-1 18:59
class Monkey {
/*海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,
拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?*/
public static void main(String[] args) {
int x = taoZi(5);
System.out.println(x);
}
public static int taoZi(int num) {
if(num == 0)
return 1;//第5只猴子分完后,手里剩下1只桃子,(满足最少要求)
else
return taoZi(num-1) * 5+ 1;
}
}
作者:
MissSur
时间:
2014-6-3 15:54
最后剩余桃子:1020个
海滩上原来最少有桃子:3121个
public class MonkeyPeach {
public static void main(String[] args) {
int num = 0;
int peach=0;
boolean flag = true;
while (flag) {
num+=4;
peach = num;
int i = 1;
for (i = 1; i <= 5; i++) {
if (peach % 4 == 0) {
flag = false;
peach = peach + peach / 4 + 1;
} else {
flag = true;
break;
}
}
}
System.out.println("last:"+num);
System.out.println("total peach:"+peach);
}
}
复制代码
请老师点评
作者:
cat73
时间:
2014-7-5 18:40
本帖最后由 cat73 于 2014-7-5 18:45 编辑
这道题我的思路是这样的:
1.先理清数据之间的关系
假设最后一个猴子拿走了n个桃子,那么拿n*4就是最后剩下的桃子,n*5+1就是最后一只猴子拿之前剩下的桃子
最后一个猴子拿之前剩下的桃子/4*5+1就是第二个猴子拿之前剩下的桃子,依次类推上去
然后由于桃子的数量只可能是整数,所以只要判断这里面出现的所有数据是否都是整数即可
表格中的分析,绿色标记的是i的值:
无标题.jpg
(37.99 KB, 下载次数: 84)
下载附件
2014-7-5 18:45 上传
public static void main(String[] args) {
int i = 0;
while(!checkNum(++i));
System.out.println("最后一个猴子拿走了" + i + "个桃子");
System.out.println("最初的桃子数为:" + (((((i * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1));
}
/**
* 检查传入的num是否符合条件
* @param num 最后一个猴子拿走的桃子数
* @return
*/
public static boolean checkNum(int num){
double t = num;
t *= 5;
t++;//最后一个猴子拿之前的桃子数
for(int i = 0; i < 4; i++){
t = t / 4 * 5 + 1;//计算出上次分桃之前剩余的桃子数量
//检查本次要分的桃子数, 本次剩下的桃子数, 本次拿走的桃子数是否都是整数
if(!(isInt(t) && isInt((t - 1) / 5 * 4) && isInt((t - 1) / 5)))
return false;
}
return true;
}
/**
* 检查一个数是否为整数
* @param num 数字
* @return 是否为整数
*/
public static boolean isInt(double num){
return (((int) num) == num);
}
复制代码
输出为:
最后一个猴子拿走了255个桃子
最初的桃子数为:3121
作者:
梦与现实
时间:
2014-11-5 03:46
/* 多的不说 直接上代码 */ public class MonkeyPeach{ public static void main(String[] args){ int n=1; int m=0; int flag=1; int monkeyNum=5; //这里我们利用while循环(死循环) while(true) { llag=1; m=monkeyNum*n+1; for(int i=monkeyNum;i>=1;i--){ if(m%(monkeyNum-1)==0){ flag++;//计算多少次的桃子数可以被4整除 } else break; } if(flag==monkeyNum)//每次的桃子都可以被4整除 break; n++; } System.out.println("开始的桃子至少是:"+m); System.out.println("此时第5个猴子得到桃子数是:"+n); } }
作者:
梦与现实
时间:
2014-11-5 03:48
/*
多的不说 直接上代码
*/
public class MonkeyPeach{
public static void main(String[] args){
int n=1;
int m=0;
int flag=1;
int monkeyNum=5;
//这里我们利用while循环(死循环)
while(true)
{
llag=1;
m=monkeyNum*n+1;
for(int i=monkeyNum;i>=1;i--){
if(m%(monkeyNum-1)==0){
flag++;//计算多少次的桃子数可以被4整除
}
else
break;
}
if(flag==monkeyNum)//每次的桃子都可以被4整除
break;
n++;
}
System.out.println("开始的桃子至少是:"+m);
System.out.println("此时第5个猴子得到桃子数是:"+n);
}
}
//刚才快速回复码乱了 再来一次 看到那么久都没解决 我回答下
作者:
邹中源
时间:
2014-11-10 09:46
表数学渣,笔试不会这么坑吧
作者:
路尽鹭飞
时间:
2015-1-17 22:50
感觉楼主水平一般啊
作者:
黑小白
时间:
2016-9-14 16:30
我以为只是简单的数学题!看来我还要继续学习黑客知识~新人求指教!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2