java算法题,话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/10 22:50:37
java算法题,
话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子?
大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先.
晚上某个家伙悄悄滴起床,悄悄滴将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的猴子,然后又悄悄滴藏了一份,然后把剩下滴椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.
过了会儿,另一个家伙也悄悄滴起床,悄悄滴将剩下滴椰子分成5份,结果发现多一个椰子,顺手就又给了幸运的猴子,然后又悄悄滴藏了一份,把剩下滴椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.
又过了一会 ...
...
又过了一会 ...
总之5个家伙都起床过,都做了一样的事情 :blush;
早上大家都起床,各自心怀鬼胎的分椰子了,这个猴子还真不是一般的幸运,因为这次把椰子分成5分后居然还是多一个椰子,只好又给它了.
这堆椰子最少有多少个?
import java.util.GregorianCalendar;
public class MonkeyTest {
public static int I = 1;
public static int T = 1;//两个静态变量,用于记录运算次数
public static int getHai(int n,int a) {//根据输入的最后分配数和分配次数,查找可能是的初始数.
I++;//每进入方法一次,计数加1
int num = 5 * a + 1;
if (n == 0) {
return num;
} else {
return getHai(n - 1,num / 4);//第一次符合则继续向下递归
}
}
public static boolean isHai(int n,int a) {//判断所输入的数是不是符合分配规则
I++;//进入方法一次计数加1
T++;//直接判断时每进入一次计数加1
int num = a / 5;
if (a % 5 = 1)
return false;
else if (n == 0)
return true;
else {
return isHai(n - 1,4 * num);//一次符合时递归下次
}
}
public static void main(String[] args) {
int i = 1,sum = 0,n = 1,k = 1;
GregorianCalendar gc = new GregorianCalendar();
long time = gc.getTimeInMillis();
while (true) {//先查找可能符合标准的数,再判断是不是真的符合标准
sum = getHai(5,i);
if (isHai(5,sum)) {
System.out.println(sum + ":" + i + ":" + MonkeyTest.I);
break;
}
i++;//可直接记录查找次数
}
System.out.println(gc.getTimeInMillis() - time);//显示用时毫秒数
time = gc.getTimeInMillis();
while (true) {//用直接判断的方式查找
if (isHai(5,n)) {
System.out.println(n + ":" + k +":"+MonkeyTest.T);
break;
}
n += 5;//该数起码减1之后可以整除一次5,因而直接每次加5
k++;//记录运行次数
}
System.out.println(gc.getTimeInMillis() - time);
}
}
测试结果时间都消耗很少,结果未15621,先查找后判断的方法运算次数较少!
程序看的不是很明白,请大家帮我写清楚,
我看的不是很明白,
话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子?
大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先.
晚上某个家伙悄悄滴起床,悄悄滴将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的猴子,然后又悄悄滴藏了一份,然后把剩下滴椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.
过了会儿,另一个家伙也悄悄滴起床,悄悄滴将剩下滴椰子分成5份,结果发现多一个椰子,顺手就又给了幸运的猴子,然后又悄悄滴藏了一份,把剩下滴椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.
又过了一会 ...
...
又过了一会 ...
总之5个家伙都起床过,都做了一样的事情 :blush;
早上大家都起床,各自心怀鬼胎的分椰子了,这个猴子还真不是一般的幸运,因为这次把椰子分成5分后居然还是多一个椰子,只好又给它了.
这堆椰子最少有多少个?
import java.util.GregorianCalendar;
public class MonkeyTest {
public static int I = 1;
public static int T = 1;//两个静态变量,用于记录运算次数
public static int getHai(int n,int a) {//根据输入的最后分配数和分配次数,查找可能是的初始数.
I++;//每进入方法一次,计数加1
int num = 5 * a + 1;
if (n == 0) {
return num;
} else {
return getHai(n - 1,num / 4);//第一次符合则继续向下递归
}
}
public static boolean isHai(int n,int a) {//判断所输入的数是不是符合分配规则
I++;//进入方法一次计数加1
T++;//直接判断时每进入一次计数加1
int num = a / 5;
if (a % 5 = 1)
return false;
else if (n == 0)
return true;
else {
return isHai(n - 1,4 * num);//一次符合时递归下次
}
}
public static void main(String[] args) {
int i = 1,sum = 0,n = 1,k = 1;
GregorianCalendar gc = new GregorianCalendar();
long time = gc.getTimeInMillis();
while (true) {//先查找可能符合标准的数,再判断是不是真的符合标准
sum = getHai(5,i);
if (isHai(5,sum)) {
System.out.println(sum + ":" + i + ":" + MonkeyTest.I);
break;
}
i++;//可直接记录查找次数
}
System.out.println(gc.getTimeInMillis() - time);//显示用时毫秒数
time = gc.getTimeInMillis();
while (true) {//用直接判断的方式查找
if (isHai(5,n)) {
System.out.println(n + ":" + k +":"+MonkeyTest.T);
break;
}
n += 5;//该数起码减1之后可以整除一次5,因而直接每次加5
k++;//记录运行次数
}
System.out.println(gc.getTimeInMillis() - time);
}
}
测试结果时间都消耗很少,结果未15621,先查找后判断的方法运算次数较少!
程序看的不是很明白,请大家帮我写清楚,
我看的不是很明白,
上面的程序,用了递归,所以不太好理解,也不太好给你说清楚.我帮你写了一个简单一点的,希望能帮到你,我测试过了结果是一样的.如果你还是想明白上面代码的含义就HI我吧~!
public class MonkeyTest {
public static int getHai(int n) {//n表示一共分了几次,最后一次除外,也就是说五个人每次各分了一次,那么n就是5
int i = 1;//表示最后一次分的时候,每个得到的椰子数,从1开始
int sum = 0;//表示总的椰子树
boolean flag = false;//用于控制程序的结束
while(true){
sum = i*5+1;//最后一次分配时的椰子树
for(int j = n; j>0; j--){
if(sum%4==0){//每一次分配后余下的椰子树应该是4的整数倍
sum = sum/4*5+1;//计算每一次未分配前的椰子树
if(j==1) {//如果已经进行了五次分配,那么停止计算,已经找到所要的数
flag = true;
break;
}
}
else{//如果每一分配后余下的椰子树不是4的整数倍,那么增加i的值,重新开始计算
i++;
break;
}
}
if(flag) break;
}
System.out.println(i);
return sum;
}
public static void main(String[] args) {
System.out.println(MonkeyTest.getHai(5));
}
}
public class MonkeyTest {
public static int getHai(int n) {//n表示一共分了几次,最后一次除外,也就是说五个人每次各分了一次,那么n就是5
int i = 1;//表示最后一次分的时候,每个得到的椰子数,从1开始
int sum = 0;//表示总的椰子树
boolean flag = false;//用于控制程序的结束
while(true){
sum = i*5+1;//最后一次分配时的椰子树
for(int j = n; j>0; j--){
if(sum%4==0){//每一次分配后余下的椰子树应该是4的整数倍
sum = sum/4*5+1;//计算每一次未分配前的椰子树
if(j==1) {//如果已经进行了五次分配,那么停止计算,已经找到所要的数
flag = true;
break;
}
}
else{//如果每一分配后余下的椰子树不是4的整数倍,那么增加i的值,重新开始计算
i++;
break;
}
}
if(flag) break;
}
System.out.println(i);
return sum;
}
public static void main(String[] args) {
System.out.println(MonkeyTest.getHai(5));
}
}
话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的··
5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子!大家把椰子全部采摘下来放在一起,但是
一道IQ题岛上一建筑物,离他不远处有个孤岛,孤岛上有个尸体,拿着燃烧过的木棒,尸体一丝不挂,远处有个小岛,猜小岛上的建筑
给大家出一道逻辑题一个岛上困住了一群人,他们只有一条船可以划到陆地.困在岛上的有,一个猎人带着一条狗,一个老头带着两个小
海盗船英语怎么说?一个单词的说法
求一部电影的名字,中国片,两男两女被骗到一个岛上然后发现岛上的两个人吃人,好惊悚,想在看看.
一些科学家到一个海岛上考察,发现岛上生长的昆虫大多无翅或残翅,之后得知岛上经常刮大风,请你用达尔文的
梦见逃难代表什么?梦见自己带着很多人逃难,最后在一个地下室里安顿下来,整天提心吊胆,担心被发现.
孤零零的造句
孤零零的反义词是什么
智力八人过河话说有一家六口人,包括爸爸、妈妈、两个女儿及两个儿子在旅行途中迷了路,还不幸遇上了一个逃狱的犯人,幸好犯人让
海盗船内存怎么样想配台8000+的机器,朋友都推荐我用海盗船内存,但是我不了解,希望大家给个建议呀?