微軟面試題和答案

第一組
1.燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?

2.你有一桶果凍,其中有黃色、綠色、紅色三種,閉上眼睛抓取同種顏色的兩個。抓取多少個就可以確定你肯定有兩個同一顏色的果凍?

3.如果你有無窮多的水,一個3公升的提捅,一個5公升的提捅,兩隻提捅形狀上下都不均勻,問你如何才能準確稱出4公升的水?

4.一個岔路口分別通向誠實國和說謊國。來了兩個人,已知一個是誠實國的,另一個是說謊國的。誠實國永遠說實話,說謊國永遠說謊話。現在你要去說謊國,但不知道應該走哪條路,需要問這兩個人。請問應該怎麼問?

5.12個球一個天平,現知道只有一個和其它的重量不同,問怎樣稱才能用三次就找到那個球。13個呢?(注意此題並未說明那個球的重量是輕是重,所以需要仔細考慮)

6.在9個點上畫10條直線,要求每條直線上至少有三個點?

7.在一天的24小時之中,時鐘的時針、分針和秒針完全重合在一起的時候有幾次?都分別是什麼時間?你怎樣算出來的?

8.怎麼樣種植4棵樹木,使其中任意兩棵樹的距離相等?

第二組

1.爲什麼下水道的蓋子是圓的?

2.中國有多少輛汽車?

3.將汽車鑰匙插入車門,向哪個方向旋轉就可以打開車鎖?

4.如果你要去掉中國的34個省(含自治區、直轄市和港澳特區及臺灣省)中的任何一個,你會去掉哪一個,爲什麼?

5.多少個加油站才能滿足中國的所有汽車?

6.想象你站在鏡子前,請問,爲什麼鏡子中的影象可以顛倒左右,卻不能顛倒上下?

7.爲什麼在任何旅館裏,你打開熱水,熱水都會瞬間傾瀉而出?

8.你怎樣將Excel的用法解釋給你的奶奶聽?

9.你怎樣重新改進和設計一個ATM銀行自動取款機?

10.如果你不得不重新學習一種新的計算機語言,你打算怎樣着手來開始?

11.如果你的生涯規劃中打算在5年內受到獎勵,那獲取該項獎勵的動機是什麼?觀衆是誰?

12.如果微軟告訴你,我們打算投資五百萬美元來啓動你的投資計劃,你將開始什麼樣商業計劃?爲什麼?

13.如果你能夠將全世界的電腦廠商集合在一個辦公室裏,然後告訴他們將被強迫做一件事,那件事將是什麼? 

第三組

1.你讓工人爲你工作7天,回報是一根金條,這個金條平分成相連的7段,你必須在每天結束的時候給他們一段金條。如果只允許你兩次把金條弄斷,你如何給你的工人付費?

2.有一輛火車以每小時15公里的速度離開北京直奔廣州,同時另一輛火車每小時20公里的速度從廣州開往北京。如果有一隻鳥,以30公里每小時的速度和兩輛火車同時啓動,從北京出發,碰到另一輛車後就向相反的方向返回去飛,就這樣依次在兩輛火車之間來回地飛,直到兩輛火車相遇。請問,這隻鳥共飛行了多長的距離?

3.你有四個裝藥丸的罐子,每個藥丸都有一定的重量,被污染的藥丸是沒被污染的藥丸的重量+1。只稱量一次,如何判斷哪個罐子的藥被污染了?

4.門外三個開關分別對應室內三盞燈,線路良好,在門外控制開關時候不能看到室內燈的情況,現在只允許進門一次,確定開關和燈的對應關係?

5.人民幣爲什麼只有1、2、5、10的面值?

6.你有兩個罐子以及50個紅色彈球和50個藍色彈球,隨機選出一個罐子, 隨機選出一個彈球放入罐子,怎麼給出紅色彈球最大的選中機會?在你的計劃裏,得到紅球的機率是多少?

7.給你兩顆6面色子,可以在它們各個面上刻上0-9任意一個數字,要求能夠用它們拼出任意一年中的日期數值

第四組

1. 五個海盜搶到了100顆寶石,每一顆都一樣大小和價值連城。他們決定這麼分:抽籤決定自己的號碼(1、2、3、4、5)。首先,由1號提出分配方案,然後大家表決,當且僅當超過半數的人同意時,按照他的方案進行分配,否則將被扔進大海喂鯊魚如果1號死後,再由2號提出分配方案,然後剩下的4人進行表決,當且僅當超過半數的人同意時,按照他的方案進行分配,否則將被扔入大海喂鯊魚依此類推
條件:每個海盜都是很聰明的人,都能很理智地做出判斷,從而做出選擇。
問題:第一個海盜提出怎樣的分配方案才能使自己的收益最大化?

2. 一道關於飛機加油的問題,已知:每個飛機只有一個油箱,飛機之間可以相互加油(注意是相互,沒有加油機一箱油可供一架飛機繞地球飛半圈,
問題:爲使至少一架飛機繞地球一圈回到起飛時的飛機場,至少需要出動幾架飛機?(所有飛機從同一機場起飛,而且必須安全返回機場,不允許中途降落,中間沒有飛機場)

3. 汽車加油問題
一輛載油500升的汽車從A開往1000公里外的B,已知汽車每公里耗油量爲1升,A處有無窮多的油,其他任何地點都沒有油,但該車可以在任何地點存放油以備中轉,問從A到B最少需要多少油

4. 擲杯問題
一種杯子,若在第N層被摔破,則在任何比N高的樓層均會破,若在第M層不破,則在任何比M低的樓層均會破,給你兩個這樣的杯子,讓你在100層高的樓層中測試,要求用最少的測試次數找出恰巧會使杯子破碎的樓層。

5. 推理遊戲
教授選出兩個從2到9的數,把它們的和告訴學生甲,把它們的積告訴學生乙,讓他們輪流猜這兩個數
甲說:“我猜不出”
乙說:“我猜不出”
甲說:“我猜到了”
乙說:“我也猜到了”
問這兩個數是多少

6. 病狗問題
一個住宅區內有100戶人家,每戶人家養一條狗,每天傍晚大家都在同一個地方遛狗。已知這些狗中有一部分病狗,由於某種原因,狗的主人無法判斷自己的狗是否是病狗,卻能夠分辨其他的狗是否有病,現在,上級傳來通知,要求住戶處決這些病狗,並且不允許指認他人的狗是病狗(就是隻能判斷自己的),過了7天之後,所有的病狗都被處決了,問,一共有幾隻病狗?爲什麼?

7. U2合唱團在17分鐘內得趕到演唱會場,途中必需跨過一座橋,四個人從橋的同一端出發,你得幫助他們到達另一端,天色很暗,而他們只有一隻手電筒。一次同時最多可以有兩人一起過橋,而過橋的時候必須持有手電筒,所以就得有人把手電筒帶來帶去,來回橋兩端。手電筒是不能用丟的方式來傳遞的。四個人的步行速度各不同,若兩人同行則以較慢者的速度爲準。BONO需花1分鐘過橋,EDGE需花2分鐘過橋,ADAM需花5分鐘過橋,LARRY需花10分鐘過橋,他們要如何在17分鐘內過橋呢?

8. 監獄裏有100個房間,每個房間內有一囚犯。一天,監獄長說,你們獄房外有一電燈,你們在放風時可以控制這個電燈(熄或亮)。每天只能有一個人出來放風,並且防風是隨機的。如果在有限時間內,你們中的某人能對我說:“我敢保證,現在每個人都已經至少放過一次風了。”我就放了你們!問囚犯們要採取什麼策略才能被監獄長放掉?如果採用了這種策略,大致多久他們可以被釋放?

第五組

1.某手機廠家由於設計失誤,有可能造成電池壽命比原來設計的壽命短一半(不是衝放電時間),解決方案就是免費更換電池或給50元購買該廠家新手機的折換券。請給所有已購買的用戶寫信告訴解決方案。

2.一高層領導在參觀某博物館時,向博物館館員小王要了一塊明代的城磚作爲紀念,按國家規定,任何人不得將博物館收藏品變爲私有。博物館館長需要如何寫信給這位領導,將城磚取回。

3.營業員小姐由於工作失誤,將2萬元的筆記本電腦以1.2萬元錯賣給李先生,王小姐的經理怎麼寫信給李先生試圖將錢要回來?

4.給你一款新研製的手機,如果你是測試組的組長,你會如何測試?

5.如何爲函數int atoi(const char * pstr)編寫測試向量?

第六組

1.鏈表和數組的區別在哪裏?

2.編寫實現鏈表排序的一種算法。說明爲什麼你會選擇用這樣的方法?

3.編寫實現數組排序的一種算法。說明爲什麼你會選擇用這樣的方法?

4.請編寫能直接實現char * strcpy(char * pstrDest,const char * pstrSource)函數功能的代碼。

5.編寫反轉字符串的程序,要求優化速度、優化空間。

6.在鏈表裏如何發現循環鏈接?

7.給出洗牌的一個算法,並將洗好的牌存儲在一個整形數組裏。

8.寫一個函數,檢查字符是否是整數,如果是,返回其整數值。(或者:怎樣只用4行代碼

9.給出一個函數來輸出一個字符串的所有排列。

10.請編寫實現void * malloc(int)內存分配函數功能一樣的代碼。

11.給出一個函數來複制兩個字符串A和B。字符串A的後幾個字節和字符串B的前幾個字節重疊。

12.怎樣編寫一個程序,把一個有序整數數組放到二叉樹中?

13.怎樣從頂部開始逐層打印二叉樹結點數據?請編程。

14.怎樣把一個鏈表掉個順序(也就是反序,注意鏈表的邊界條件並考慮空鏈表)? --

15.請編寫能直接實現int atoi(const char * pstr)函數功能的代碼

=======================以下爲答案=====================
第一組題答案:

1)三根繩,第一根點燃兩端,第二根點燃一端,第三根不點。第一根繩燒完(30分鐘)後,點燃第二根繩的另一端,第二根繩燒完(45分鐘)後,點燃第三根繩子兩端,第三根繩燒完(1小時15分)後,計時完成

2)根據抽屜原理,4個

3)3升裝滿;3升-〉5升(全注入);3升裝滿;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注入1升);3升裝滿;3升-〉5升;完成(另:可用回溯法編程求解)

4)問其中一人:另外一個人會說哪一條路是通往誠實國的?回答者所指的那條路必然是通往說謊國的。

5)12個球:
第一次:4,4 如果平了:
那麼剩下的球中取3放左邊,取3個好球放右邊,稱:
如果左邊重,那麼取兩個球稱一下,哪個重哪個是次品,平的話第三個重,是次品,輕的話同理
如果平了,那麼剩下一個次品,還可根據需要稱出次品比正品輕或者重
如果不平:
那麼不妨設左邊重右邊輕,爲了便於說明,將左邊4顆稱爲重球,右邊4顆稱爲輕球,剩下4顆稱爲好球
取重球2顆,輕球2顆放在左側,右側放3顆好球和一顆輕球
如果左邊重
稱那兩顆重球,重的一個次品,平的話右邊輕球次品
如果右邊重
稱左邊兩顆輕球,輕的一個次品
如果平
稱剩下兩顆重球,重的一個次品,平的話剩下那顆輕球次品

13個球:
第一次:4,4,如果平了
剩5顆球用上面的方法仍舊能找出次品,只是不能知道次品是重是輕
如果不平,同上 

6)
o o o
o o o
o o o

7)23次,因爲分針要轉24圈,時針才能轉1圈,而分針和時針重合兩次之間的間隔顯然> 1小時,它們有23次重合機會,每次重合中秒針有一次重合機會,所以是23次
重合時間可以對照手錶求出,也可列方程求出

8)在地球表面種樹,做一個地球內接的正四面體,內接點即爲所求

第二組 無標準答案

第三組

1. 分成1,2,4三段,第一天給1,第二天給2取回1,第3天給1,第4天給4取回1、2,第5天給1,第6天給2取回1,第七天給1

2. 求出火車相遇時間,鳥速乘以時間就是鳥飛行的距離

3. 四個罐子中分別取1,2,3,4顆藥丸,稱出比正常重多少,即可判斷出那個罐子的藥被污染

4. 三個開關分別:關,開,開10分鐘,然後進屋,暗且涼的爲開關1控制的燈,亮的爲開關2控制的燈,暗且熱的爲開關3控制的燈

5. 因爲可以用1,2,5,10組合成任何需要的貨幣值,日常習慣爲10進制

6. 題意不理解...*_*

7. 012345 0126(9)78

第四組 都是很難的題目

第一題:97 0 1 2 0 或者 97 0 1 0 2 (提示:可用逆推法求出)

第二題:3架飛機5架次,飛法:
ABC 3架同時起飛,1/8處,C給AB加滿油,C返航,1/4處,B給A加滿油,B返航,A到達1/2處,C從機場往另一方向起飛,3/4處,C同已經空油箱的A平分剩餘油量,同時B從機場起飛,AC到7/8處同B平分剩餘油量,剛好3架飛機同時返航。所以是3架飛機5架次。第三題:需要建立數學模型
(提示,嚴格證明該模型最優比較麻煩,但確實可證,大膽猜想是解題關鍵)
題目可歸結爲求數列 an=500/(2n+1) n=0,1,2,3......的和Sn什麼時候大於等於1000,解得n> 6
當n=6時,S6=977.57
所以第一個中轉點離起始位置距離爲1000-977.57=22.43公里
所以第一次中轉之前共耗油 22.43*(2*7+1)=336.50升
此後每次中轉耗油500升
所以總耗油量爲7*500+336.50=3836.50升

第四題:需要建立數學模型
題目可歸結爲求自然數列的和S什麼時候大於等於100,解得n> 13
第一個杯子可能的投擲樓層分別爲:14,27,39,50,60,69,77,84,90,95,99,100

第五題:3和4(可嚴格證明)
設兩個數爲n1,n2,n1> =n2,甲聽到的數爲n=n1+n2,乙聽到的數爲m=n1*n2
證明n1=3,n2=4是唯一解
證明:要證以上命題爲真,不妨先證n=7
1)必要性:
i) n> 5 是顯然的,因爲n <4不可能,n=4或者n=5甲都不可能回答不知道
ii) n> 6 因爲如果n=6的話,那麼甲雖然不知道(不確定2+4還是3+3)但是無論是2,4還是3,3乙都不可能說不知道(m=8或者m=9的話乙說不知道是沒有道理的)
iii) n <8 因爲如果n> =8的話,就可以將n分解成 n=4+x 和 n=6+(x-2),那麼m可以是4x也可以是6(x-2)而4x=6(x-2)的必要條件是x=6即n=10,那樣n又可以分解成8+2,所以總之當 n> =8時,n至少可以分解成兩種不同的合數之和,這樣乙說不知道的時候,甲就沒有理由馬上說知道。
以上證明了必要性

2)充分性
當n=7時,n可以分解成2+5或3+4
顯然2+5不符合題意,捨去,容易判斷出3+4符合題意,m=12,證畢
於是得到n=7 m=12 n1=3 n2=4是唯一解。第六題:7只(數學歸納法證明)
1)若只有1只病狗,因爲病狗主人看不到有其他病狗,必然會知道自己的狗是病狗(前提是一定存在病狗),所以他會在第一天把病狗處決。
2)設有k只病狗的話,會在第k天被處決,那麼,如果有k+1只,病狗的主人只會看到k只病狗,而第k天沒有人處決病狗,病狗主人就會在第k+1天知道自己的狗是病狗,於是病狗在第k+1天被處決
3)由1)2)得,若有n只病狗,必然在第n天被處決

第七題:(提示:可用圖論方法解決)
BONO&EDGE過(2分),BONO將手電帶回(1分),ADAM&LARRY過(10分),EDGE將手電帶回(2分),BONO&EDGE過(2分) 2+1+10+2+2=17分鐘

第八題:
約定好一個人作爲報告人(可以是第一個放風的人)
規則如下:
1、報告人放風的時候開燈並數開燈次數
2、其他人第一次遇到開着燈放風時,將燈關閉
3、當報告人第100次開燈的時候,去向監獄長報告,要求監獄長放人......
按照概率大約30年後(10000天)他可以被釋放

第五組無標準答案

第六組部分題參考答案:

4.

char * strcpy(char * pstrDest,const char * pstrSource)
{
assert((pstrDest!=NULL)&&(pstrSource!=NULL));
char * pstr=pstrDest;
while((*(pstrDest++)=*(pstrSource++))!= '/0 ');
return pstr;
}

5.

char * strrev(char * pstr)
{
assert(pstr!=NULL);

char * p=pstr;
char * pret=pstr;
while(*(p++)!= '/0 ');
p--;
char tmp;
while(p> pstr)
{
tmp=*p;
*(p--)=*(pstr);
*(pstr++)=tmp;
}
return pret;

demo.JPG

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章