有一根27厘公尺的細木桿,在第3厘公尺、7厘公尺、11厘公尺、17厘公尺、23厘公尺這五個位置上各有乙隻螞蟻。木桿很細,不能同時通過乙隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘公尺的距離。編寫程式,求所有螞蟻都離開木桿的最小時間和最大時間。
解法一:
最小11,最大就....32種走法,用程式模擬算比較簡單,如果找演算法規律.....就.....
正解!每個螞蟻物件維護自己的幾個屬性:
time 在木頭上走的時間
pos 在木頭上的座標
orientation 方向(-1 or 1)
recursion:
1 所有螞蟻走一步,向量pos加1,time加1
2 檢查是否有螞蟻在同一座標上,如果有,將它們掉頭
3 檢查是否有螞蟻的座標在[0,27]以外的外圍,如果有,記下它的time值,然後這個螞蟻出局
4 repeat 1-3,直到所有螞蟻出局。它們time的最大值就是乙個解(一共有32個情況,32種解)。
解法二:
class funnyant
public void setdirection(int direction)
public void move() else
}public void switchdirection()
public int getx()
public string getdirection()
}public static void main(string args) ;
ant ant = null;
// list all conditions
for (byte i = 0; i < 32; i++)
int timer = 0;
while (v.size() > 0)
}timer++;
// check whether there is collide
ant = null;
for (int l = 0, lastx = -1; l < v.size(); l++)
lastx = ant.getx();}}
timerv.addelement(new integer(timer));
v.removeallelements();
}int min = ((integer) (timerv.elementat(0))).intvalue(), max = ((integer) (timerv.elementat(0))).intvalue();
integer value = null;
for (int i = 0; i < timerv.size(); i++)
if (x > max)
}system.out.println("max :" + max + " min :" + min);}}
解法三:
//是否所有螞蟻下桿,i為螞蟻隻數
bool isout(int *p,int i)
int main(void)
;unsigned short int i=1;
//螞蟻開始運動方向最多32(2的5次方)種
for(count;count<32;count++)
}//看相鄰兩隻螞蟻是否碰頭,碰頭調轉方向
for(int s=0;s<4;s++)
}//是否所有螞蟻下桿
if(isout(pos,5))}}
return 0;
}來自 http://community.csdn.net/expert/topic/5141/5141367.xml?temp=.8952143
本人整理
百度面試題
一 選擇題 15分 共10題 1.任何乙個基於 比較 的內部排序的演算法,若對6個元素進行排序,則在最壞情況下所需的比較次數至少為 a 10 b 11 c 21 d 36 2.關係模型有三類完整性約束,定義外來鍵實現的是 完整性.a.實體完整性 b.參照完整性 c.使用者定義的完整性 d.實體完整性...
百度面試題
1.乙個int陣列,裡面資料無任何限制,要求求出所有這樣的數a i 其左邊的數都小於等於它,右邊的數都大於等於它。能否只用乙個額外陣列和少量其它空間實現。2.乙個檔案,內含一千萬行字串,每個字串在1k以內,要求找出所有相反的串對,如abc和cba。當時怎麼想的忘記了,現在重新思考一下,檔案的大小上限...
百度面試題
第一題 編寫乙個方法 求乙個字串的位元組長度第二題 如何控制alert中的換行第三題 解釋document.getelementbyid elementid style.fontsize 1.5em em是個相對單位。第四題將乙個類似圖中的效果分離成css和html 第五題按照格式 x年xx月xx日...