百度面試題及答案
/*百度面試題
* 有一根27釐米的細木杆,在第3釐米、7釐米、11釐米、17釐米、23釐米這五個位置上各有一隻螞蟻。
* 木杆很細,不能同時通過一隻螞蟻。開始 時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,
* 但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一釐米的距離。
* 編寫程序,求所有螞蟻都離開木杆 的最小時間和最大時間。
*
*
* 分析:題目中的螞蟻只可能相遇在整數點,不可以相遇在其它點,比如3.5cm處之類的,也就是可以讓每隻螞蟻走 1秒,然後
* 查看是否有相遇的即可.
*
* 這樣我的程序實現思路就是,初始化5只螞蟻,讓每隻螞蟻走1秒,然後看是否有相遇的,如果有則做相應處理.當每隻螞蟻都
* 走出木杆時,我就記錄當前時間.這樣就可以得到當前狀態情況下,需要多久可以走出木杆,然後遍歷所有狀態則可以得到所胡
* 可能.
*/
package baidu;
public class Ant {
/*
* step 表示螞蟻每一個單位時間所走的長度
*/
private final static int step = 1;
/*
* position表示螞蟻所處的初始位置
*/
private int position;
/*
* direction表示螞蟻的前進方向,如果為1表示向27釐米的方向走, 如果為-1,則表示往0的方向走。
*/
private int direction = 1;
/*
* 此函數運行一次,表示螞蟻前進一個單位時間,如果已經走下木杆則會拋出異常
*/
public void walk() {
if (isOut()) {
throw new RuntimeException("the ant is out");
}
position = position + ction * step;
};
/**
* 檢查螞蟻是否已經走出木杆,如果走出返回true
*
*/
public boolean isOut() {
return position <= 0 || position >= 27;
}
/**
* 檢查此螞蟻是否已經遇到另外一隻螞蟻
* @param ant
* @return 如果遇到返回true
*/
public boolean isEncounter(Ant ant) {
return tion == tion;
}
/**
* 改變螞蟻的前進方向
*/
public void changeDistation() {
direction = -1 * direction;
}
/**
* 構造函數,設置螞蟻的初始前進方向,和初始位置
* @param position
* @param direction
*/
public Ant(int position, int direction) {
tion = position;
if (direction != 1) {
ction = -1;//方向設置初始位置,比如為0時,也將其設置為1.這樣可以方便後面的處理
} else {
ction = 1;
}
}
}
/////////////////////////////////////////////////////////
package baidu;
public class Controller {
public static void main(String[] args) {
int time = 0;
for (int i = 0; i < 32; i++) {
Ant[] antArray = getAntList(getPoistions(), getDirections(i));
while (!isAllOut(antArray)) {
for (Ant ant : antArray) {
if (!t()) {
();
}
}
time++;
// 查看是否有已經相遇的Ant,如果有則更改其前進方向
dealEncounter(antArray);
}
tln(time);
// 將時間歸0,這樣可以重新設置條件,再次得到全部走完所需要的時間.
time = 0;
}
}
/**
* 這個函數的算法很亂,但暫時能解決問題
*
* @param list
*/
public static void dealEncounter(Ant[] antArray) {
int num_ant = th;
for (int j = 0; j < num_ant; j++) {
for (int k = j + 1; k < num_ant; k++) {
if (antArray[j]counter(antArray[k])) {
antArray[j]geDistation();
antArray[k]geDistation();
}
}
}
}
/**
* 因為有5只Ant,所以組合之後有32種組合.剛好用5位二進制來表示,如果為0則表示Ant往0的方向走 如果為1,則表示往27的方向走
*
* 注:在通過Ant的構造函數設置初始值時,通過過濾把0修改成了-1.
*/
public static int[] getDirections(int seed) {
int result[] = new int[5];
result[0] = seed % 2;
result[1] = seed / 2 % 2;
result[2] = seed / 4 % 2;
result[3] = seed / 8 % 2;
result[4] = seed / 16 % 2;
tln("directions is " + result[0] + "|" + result[1] + "|"
+ result[2] + "|" + result[3] + "|" + result[4]);
return result;
}
/**
* 批量設置Ant的初始位置,這樣設置不是十分必要,可以直接在代碼中設置
*
* @return
*/
public static int[] getPoistions() {
return new int[] { 3, 7, 11, 17, 23 };
}
/**
* 取得設置好初始值的5只Ant
*
* @param positions
* @param directions
* @return
*/
public static Ant[] getAntList(int[] positions, int[] directions) {
Ant ant3 = new Ant(positions[0], directions[0]);
Ant ant7 = new Ant(positions[1], directions[1]);
Ant ant11 = new Ant(positions[2], directions[2]);
Ant ant17 = new Ant(positions[3], directions[3]);
Ant ant23 = new Ant(positions[4], directions[4]);
return new Ant[] { ant3, ant7, ant11, ant17, ant23 };
}
/**
* 判斷是否所有的Ant都已經走出了木杆,也就是設置退出條件
*
* @param antArray
* @return
*/
public static boolean isAllOut(Ant[] antArray) {
for (Ant ant : antArray) {
if (t() == false) {
return false;
}
}
return true;
}
}
編程:
用C語言實現一個revert函數,它的功能是將輸入的字符串在原串上倒序後返回。
2 編程:
用C語言實現函數void * memmove(void *dest,const void *src,size_t n)。memmove
函數的功能是拷貝src所指的內存內容前n個字節
到dest所指的`地址上。
3 英文拼寫糾錯:
在用户輸入英文單詞時,經常發生錯誤,我們需要對其進行糾錯。假設已經有一個包
含了正確英文單詞的詞典,請你設計一個拼寫糾錯
的程序。
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的複雜度;
(3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
4 尋找熱門查詢:
搜索引擎會通過日誌文件把用户每次檢索使用的所有檢索串都記錄下來,每個查詢串
的長度為1-255字節。假設目前有一千萬個記錄,
這些查詢串的重複度比較高,雖然總數是1千萬,但如果除去重複後,不超過3百萬個
。一個查詢串的重複度越高,説明查詢它的用户越多,
也就是越熱門。請你統計最熱門的10個查詢串,要求使用的內存不能超過1G。
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的複雜度。
5 集合合併:
給定一個字符串的集合,格式如:
{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}
要求將其中交集不為空的集合合併,要求合併完成後的集合之間無交集,例如上例應
輸出
{aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的複雜度
(3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
////////////////////////////////1
1 題
char *revert(char * str)
{
int n=strlen(str);
int i=0;
char c;
for(i=0;i
{
c=str;
str=str[n-i];
str[n-i]=c;
}
return str;
}
///////////////////////////////////
2 題
void * memmove(void *dest,const void *src,size_t n)
{
assert((dest!=0)&&(src!=0));
char * temp=(char * )dest;
char * ss=(char * )src;
int i=0;
for(;i
{
*temp++=*ss++;
}
return temp;
}
/////////////////////////////////////////////////
3 題
(1)思路 :
字典以字母鍵樹組織,在用户輸入同時匹配
(2)
流程:
每輸入一個字母:
沿字典樹向下一層,
a)若可以順利下行,則繼續至結束,給出結果;
b)若該處不能匹配,糾錯處理,給出拼寫建議,繼續至a);
算法:
1.在字典中查找單詞
字典採用27叉樹組織,每個節點對應一個字母,查找就是一個字母
一個字母匹配.算法時間就是單詞的長度k.
2.糾錯算法
情況:當輸入的最後一個字母不能匹配時就提示出錯,簡化出錯處理,動態提示
可能 處理方法:
(a)當前字母前缺少了一個字母:搜索樹上兩層到當前的匹配作為建議;
(b)當前字母拼寫錯誤:當前字母的鍵盤相鄰作為提示;(只是簡單的
相關文章
-
常見熱點會計面試問題及答案及答案
會計是以貨幣為主要計量單位,運用專門的方法,核算和監督一個單位經濟活動的一種經濟管理工作。下面是小編整理的關於常見熱點會計面試問題及答案及答案,歡迎閲讀參考。1、你認為一般財務人員、財務主管、財務經理和財務 -
英語面試的典型面試問題及答案
Following are some typical questions that an interviewer may ask during a job interview, and some typical responses:Can you tell me a little more about the Canto project that you did at ABC Incorporat -
面試問題及答案以及分析
無論在學習、工作或是生活中,大家都經常接觸到作文吧,藉助作文可以提高我們的語言組織能力。怎麼寫作文才能避免踩雷呢?以下是小編收集整理的關於生日禮物的作文,歡迎大家借鑑與參考,希望對大家有所幫助。關於生日禮物的作 -
CEO們最喜愛的13個面試問題面試問題及答案
每個人都希望他們有更好的面試問題。因此,我諮詢了各個領域中的創始人或CEO,問了他們最喜愛的面試問題是什麼以及這些問題如何揭示了應聘者的情況。 1.你為什麼在Y年內換了X份工作?這個問題可以幫助我全面瞭解應聘者 -
教師招聘面試答辯題目及答案解析
1、請你列舉新課程改革倡導的學習方式,並就每一種學習方式加以簡單説明。(30分)【答案要點】新課程改革倡導自主學習、合作學習和探究學習的學習方式。自主學習(意義學習)是相對於被動學習(機械學習、他主學習)而言的 -
銀行面試半結構化面試常見問題及答案
銀行近年來成了吃香的職業,那麼要面試銀行當然要做好充分的準備,以下是小編整理提供的關於銀行常問的問題及答案,快來閲讀看看吧。銀行面試半結構化面試常見問題及答案◆ ◆ ◆一:你為什麼申請這個職位?這幾乎可以算作銀 -
面試指南:面試的27個經典問題及答案分析
在平時的學習、工作或生活中,許多人都寫過作文吧,根據寫作命題的特點,作文可以分為命題作文和非命題作文。還是對作文一籌莫展嗎?下面是小編幫大家整理的春遊的快樂作文9篇,歡迎閲讀與收藏。春遊的快樂作文 篇1春姑娘唱着 -
面試題目及答案
在各種面試中,許多面試官會問到以下問題:1、出於工作晉升的考慮,你打算繼續深造嗎?2、最大的長處和弱點分別是什麼?這些長處和弱點對你在企業的業績會有什麼樣的影響?3、你個人的長期和短期目標分別是什麼?你是如何確定 -
面試考題及答案
你怎麼理解你應聘的職位?回答提示:把崗位職責和任務及工作態度闡述一下。請你自我介紹一下你自己?回答提示:一般人回答這個問題過於平常,只説姓名、年齡、愛好、工作經驗,這些在簡歷上都有。其實,企業最希望知道的是求職者 -
電氣工程及其自動化面試問題及答案
1、三相交流電: 由三個頻率相同、電勢振幅相等、相位差互差 120 °角的交流電路組成的電力系統,叫三相交流電。2、一次設備: 直接與生產電能和輸配電有關的設備稱為一次設備。包括各種高壓斷路器、隔離開關、母線、電力