有一根27厘米的细木杆java_百度笔试题 蚂蚁爬杆

2016年4月21日百度笔试题–FirstInOutPage import java.util.ArrayList;import java.util.List;// IMPORT LIBRARY PACKAGES NEEDED BY YOUR PROGRAM// SOME CLASSES WITHIN A PACKAGE MAY BE RESTRICTED// DEFINE ANY CLASS AND METHOD NEEDED// CLASS B

最近在网上看到一个蚂蚁爬杆的笔试题,很多人写出来答案公布出来了,但是都不是很满意,下面是我自己写的,大家参考

题目:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,值传递还是引用传递,这是很常考的笔试题,关于什么是值传递什么是引用传递,我就不罗嗦,大家直接记住java中的传递机制就行,两句话的事儿。 (1)首先明确java数据类型 8种基本类型  一、4种整型      byte      1字节           -128——127      short不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class Mayi {

public static final int MAX_LENGTH = 27;

public static int[] list = {3,7,11,17,23};

/**

* @param args

*/

public static void main(String[] args) {

int[][] direct = getDirect(5);

List result = new ArrayList();

for(int i=0;i

int[] start = new int[list.length];

System.arraycopy(list, 0, start, 0, list.length);

int time = move(start,direct[i],0);

result.add(time);

}

System.out.println("max time:"+Collections.max(result));

System.out.println("min time:"+Collections.min(result));

}

/**

* 递归生成方向数组

* @param n

* @return

*/

public static int[][] getDirect(int n){

if(n==1){

return new int[][]{{1},{-1}};

}

int[][] last = getDirect(n-1);

int[][] result = new int[last.length*2][n];

for(int k=0;k

result[k][0]=1;

for(int j=0;j

result[k][j+1]=last[k][j];

}

}

for(int k=0;k

result[k+last.length][0]=-1;

for(int j=0;j

result[k+last.length][j+1]=last[k][j];

}

}

return result;

}

/**

* 按照规定的起始方向走完需要的总时间

* @param list

* @param direct

* @param sum

* @return

*/

public static int move(int[] list,int[] direct,int sum){

int tmp = -1;

int distance = MAX_LENGTH;

//查看是否可能会出现碰撞

for(int i=0;i

if(direct[i]==1&&direct[i+1]==-1){

if(list[i+1]-list[i]<=distance){

distance = list[i+1]-list[i];

tmp = i;

}

}

}

//如果有碰撞,递归进行下一步

if(tmp!=-1){

int time = distance/2;

for(int i=0;i

list[i] = list[i]+direct[i]*time;

}

direct[tmp]=-direct[tmp];

direct[tmp+1]=-direct[tmp+1];

return move(list,direct,sum)+time;

}else{

int time = 0;

for(int i=0;i

int des = list[i]*direct[i]<0?list[i]:MAX_LENGTH-list[i];

if(list[i]>0&&list[i]

time = des;

}

}

return sum+time;

}

}

}

最近在网上看到一个蚂蚁爬杆的笔试题,很多人写出来答案公布出来了,但是都不是很满意,下面是我自己写的,大家参考 题目:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值