有一根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厘米這
總結
以上是生活随笔為你收集整理的有一根27厘米的细木杆java_百度笔试题 蚂蚁爬杆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: amoeba mysql binary_
- 下一篇: 正则表达式匹配分析工具 C#编写