微軟超級變態的面試題及答案

第一組    
  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任意一個數字,要求能夠用它們拼出任意一年中的日期數值

  第四組  

  第一題   .   五個海盜搶到了100顆寶石,每一顆都一樣大小和價值連城。他們決定這麼分:

  抽籤決定自己的號碼(1、2、3、4、5)

  首先,由1號提出分配方案,然後大家表決,當且僅當超過半數的人同意時,按照他的方案

  進行分配,否則將被扔進大海喂鯊魚

  如果1號死後,再由2號提出分配方案,然後剩下的4人進行表決,當且僅當超過半數的人同

  意時,按照他的方案進行分配,否則將被扔入大海喂鯊魚

  依此類推

  條件:每個海盜都是很聰明的人,都能很理智地做出判斷,從而做出選擇。

  問題:第一個海盜提出怎樣的分配方案才能使自己的收益最大化?

  第二題   .   一道關於飛機加油的問題,已知:

  每個飛機只有一個油箱,

  飛機之間可以相互加油(注意是相互,沒有加油機)

  一箱油可供一架飛機繞地球飛半圈,

  問題:

  爲使至少一架飛機繞地球一圈回到起飛時的飛機場,至少需要出動幾架飛機?(所有飛機從同一機場起飛,而且必須安全返回機場,不允許中途降落,中間沒有飛機場)第三題.   汽車加油問題    

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

  第四題.   擲杯問題

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

  第五題.   推理遊戲

  教授選出兩個從2到9的數,把它們的和告訴學生甲,把它們的積告訴學生乙,讓他們輪流猜這兩個數

  甲說:“我猜不出”

  乙說:“我猜不出”

  甲說:“我猜到了”

  乙說:“我也猜到了”

  問這兩個數是多少

  第六題.   病狗問題

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

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

  第八題.   監獄裏有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;

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