Microsoft程序员测试题
| 原創:onefi??? http://www.frontfree.net/ | 2003年6月1日 |
最近大家在網站上看到不少Microsoft的測試題,引來不少的眼光。我在這里把所有的測試題加以整理,再附上自己的答案。(個別題目答案有多種,文本僅代表作者的思路,如有高見歡迎和我交流 onefi@frontfree.net)每道題的后面會給出一個時間。這個時間是我做出該題所用的時間。(注意,這不是什么標準時間,我相信所有瀏覽本試卷的朋友都會在某一道或多道題上找到靈感,迅速解題的)
一.最基本題型(說明:此類題型比較簡單)
| 1.燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?(這道題我當初想了一個小時) |
| 2.你有一桶果凍,其中有黃色、綠色、紅色三種,閉上眼睛抓取同種顏色的兩個。抓取多少個就可以確定你肯定有兩個同一顏色的果凍?(5秒-1分鐘) |
| 3.如果你有無窮多的水,一個3公升的提捅,一個5公升的提捅,兩只提捅形狀上下都不均勻,問你如何才能準確稱出4公升的水?(40秒-3分鐘) |
| 4.一個岔路口分別通向誠實國和說謊國。來了兩個人,已知一個是誠實國的,另一個是說謊國的。誠實國永遠說實話,說謊國永遠說謊話。現在你要去說謊國,但不知道應該走哪條路,需要問這兩個人。請問應該怎么問?(20秒-2分鐘) |
| 5.12個球一個天平,現知道只有一個和其它的重量不同,問怎樣稱才能用三次就找到那個球。13個呢?(注意此題并未說明那個球的重量是輕是重,所以需要仔細考慮)(5分鐘-1小時) |
| 6.在9個點上畫10條直線,要求每條直線上至少有三個點?(3分鐘-20分鐘) |
| 7.在一天的24小時之中,時鐘的時針、分針和秒針完全重合在一起的時候有幾次?都分別是什么時間?你怎樣算出來的?(5分鐘-15分鐘) |
?
二.沒有答案型(說明:這些題顯然不是考你智力。而考的是你的反應能力。這種題大多數沒有答案,但是要看你的反應嘍!)
| 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個藍色彈球,隨機選出一個罐子, 隨機選出一個彈球放入罐子,怎么給出紅色彈球最大的選中機會?在你的計劃里,得到紅球的幾率是多少? |
?
四.超難題(說明:如果你是第一次看到這種題,并且以前從來沒有見過類似的題型,并且能夠在半個小時之內做出答案。只能說明你的智力超常……)
| 第一題 . 五個海盜搶到了100顆寶石,每一顆都一樣大小和價值連城。他們決定這么分: | |
| ? | 抽簽決定自己的號碼(1、2、3、4、5) |
| ? | 首先,由1號提出分配方案,然后大家表決,當且僅當超過半數的人同意時,按照他的方案進行分配,否則將被扔進大海喂鯊魚 |
| ? | 如果1號死后,再由2號提出分配方案,然后剩下的4人進行表決,當且僅當超過半數的人同意時,按照他的方案進行分配,否則將被扔入大海喂鯊魚 |
| ? | 依此類推 |
| 條件:每個海盜都是很聰明的人,都能很理智地做出判斷,從而做出選擇。 問題:第一個海盜提出怎樣的分配方案才能使自己的收益最大化? | |
| 第二題 . 一道關于飛機加油的問題,已知: | |
| ? | 每個飛機只有一個油箱, |
| ? | 飛機之間可以相互加油(注意是相互,沒有加油機) |
| ? | 一箱油可供一架飛機繞地球飛半圈, |
| 問題: 為使至少一架飛機繞地球一圈回到起飛時的飛機場,至少需要出動幾架飛機?(所有飛機從同一機場起飛,而且必須安全返回機場,不允許中途降落,中間沒有飛機場) | |
?
五.主觀題(說明:在以后的工作過程中,我們可定會犯這樣那樣的錯誤。既然錯誤已經釀成,損失在所難免,我們只能想辦法把損失減少到最小。如果能巧妙地回答出這些問題,再發生錯誤的情況下。能讓客戶有最少的抱怨,公司有最少的損失。)
| 1.某手機廠家由于設計失誤,有可能造成電池壽命比原來設計的壽命短一半(不是沖放電時間),解決方案就是免費更換電池或給50元購買該廠家新手機的折換券。請給所有已購買的用戶寫信告訴解決方案。 |
| 2.一高層領導在參觀某博物館時,向博物館館員小王要了一塊明代的城磚作為紀念,按國家規定,任何人不得將博物館收藏品變為私有。博物館館長需要如何寫信給這位領導,將城磚取回。 |
| 3.營業員小姐由于工作失誤,將2萬元的筆記本電腦以1.2萬元錯賣給李先生,王小姐的經理怎么寫信給李先生試圖將錢要回來? |
?
六.算法題(說明:這些題就不是什么花樣了,考的是你的基礎知識怎么樣。再聰明而沒有實學的人都將會被這些題所淘汰。)
| 1.鏈表和數組的區別在哪里? |
| 2.編寫實現鏈表排序的一種算法。說明為什么你會選擇用這樣的方法? |
| 3.編寫實現數組排序的一種算法。說明為什么你會選擇用這樣的方法? |
| 4.請編寫能直接實現strstr()函數功能的代碼。 |
| 5.編寫反轉字符串的程序,要求優化速度、優化空間。 |
| 6.在鏈表里如何發現循環鏈接? |
| 7.給出洗牌的一個算法,并將洗好的牌存儲在一個整形數組里。 |
| 8.寫一個函數,檢查字符是否是整數,如果是,返回其整數值。(或者:怎樣只用4行代碼編寫出一個從字符串到長整形的函數?) |
| 9.給出一個函數來輸出一個字符串的所有排列。 |
| 10.請編寫實現malloc()內存分配函數功能一樣的代碼。 |
| 11.給出一個函數來復制兩個字符串A和B。字符串A的后幾個字節和字符串B的前幾個字節重疊。 |
| 12.怎樣編寫一個程序,把一個有序整數數組放到二叉樹中? |
| 13.怎樣從頂部開始逐層打印二叉樹結點數據?請編程。 |
| 14.怎樣把一個鏈表掉個順序(也就是反序,注意鏈表的邊界條件并考慮空鏈表)? |
解答與提示:
說明:答案都是自己想出來的,并不代表是最正確的答案。如果有朋友發現錯誤,或知道更好的答案。不忘賜教:onefi@frontfree.net
一.最基本題型
| 1.一根從兩頭燒 ,并且同是從中間任何一處開始燒。燒完后即為十五分鐘。然后再燒一根就是一個小時。 | |
| 2.4個。 | |
| 3.略...... | |
| 4.如果參加過類似于奧林匹克數學班的,都應做過這些題。問他你的國家怎么走,他肯定指向的是誠實國。 | |
| 5.略...... | |
| 6. | |
| 7.11次(我想是這樣的) | |
?
二.沒有答案型
| 1.圓井蓋掉不下去 |
| 2.一千萬(我這么認為) |
| 3.我會回答順時針方向。 |
| 4.北京。(原因是我生在北京長在北京,想讓北京脫離是因為想去看看外面的世界,既然美國人問咱們這種政治問題,咱們也就回應一個政治玩笑罷了) |
| 5.十萬個(可以創造將近一百萬的就業崗位呢) |
| 6.答案是“This feature is by design.” 如果考官要求給出更加合理的解釋,就對他說:“如果您對此問題有更多疑問,請與它的供應商(或者與它的發明人)聯系”。 |
| 7.如果不傾瀉而出,這家旅館將沒有人去住。(所以這個問題最好去問旅館的老板。) |
| 8.告訴她這是最先進的東西,她不需要動手,我來幫她做就可以。 |
| 9.我想斯皮爾伯格來回答這道題是在合適不過得了。 |
| 10.我覺得回放飛網呆上半個月比較合適。 |
| 11.這題我沒有任何想法,因為沒有工作經驗,所以完全沒聽明白他問的是什么! |
| 12.做微軟的OEM,這樣能夠更好的服務微軟。 |
| 13.把主機箱集成在一個液晶顯示器中! |
三.難題
| 1.切兩刀,分為1/7、2/7、4/7三段。第一天給1/7;第二天給2/7,要回1/7;第三天給1/7 ;第四天給4/7 要回1/7+2/7;第五天給1/7;第六天給2/7,要會1/7;第七天給1/7 |
| 2.至今不知道應如何解答。 |
| 3.依次從四個罐子中取出1、2、3、4個藥丸,結果不用說了吧! |
| 4.先開一個,開很長時間。然后關掉,再開另一個。出去看,亮著的那個不用說。剩下的兩個不亮的,按照燈泡的溫度來進行判斷。 |
| 5.至今不知道應如何解答。 |
| 6.不清楚。可能是50%。 |
?
四.超難題
| 可以去放飛技術網www.frontfree.net中的論壇看看,有不少高手仍在討論這個問題...... |
| 曾經問過很多人。沒有一個人的答案非常令人滿意。期待高手的出現....... |
?
五.主觀題
| 1.告訴用戶我公司為答謝廣大顧客長時間以來的厚愛,顧客可以持原電池免費更換使用壽命為原電池一倍的新型電池。或者可以持購買發票,獲得50元購買該廠家新手機的折換券。 |
| 2.信件如下: |
| 3.信件如下: “ 尊敬的顧客,您好! 由于工作人員的失誤,誤將一臺樣品機賣給您。為了您能夠更好的使用我公司的產品,我公司決定為您免費更換同等價位的筆記本一臺。并且我們有性價比更加優越的xxxII 型筆記本電腦,售價20000元人民幣。如果您此時購買,我們將會以19000元的優惠價格售出。” |
六.算法題
請參考數據結構和計算機算法類書籍,作者就不再抄書了。
附(1):燒繩子類問題總結:
一般給出的繩子都是不均勻的。如果一根為一小時,那么半個小時的計算方法是從兩頭燒。十五分鐘的計算方法是從兩頭燒,同時從中間任何一個地方開始燒,這樣這根繩子就有四個燃燒點,時間自然是一個燃燒點的四分之一。如果計算十分鐘的時間,那么就讓繩子有六個燃燒點,方法就不用說了吧!
附(2):天平稱球問題解答以及總結:
將球分為a b c d; e f g h; i j k l 三組。
第一次稱量,比較 abcd efgh
情形一:
兩者重量相等,此時說明答案在ijkl中。
稱量ij,
如果相等,說明答案在kl中。拿k與a比較,如果相等,答案為l;如果不等,答案為k。
如果不等,說明答案在ij中。拿i與a比較,如果相等,答案為j;如果不等,答案為i。
情形二:
abcd輕。
在efgh中取出fgh,替換掉abcd中的bcd。 在ijkl中取出jkl,補充到原來fgh的位置。
如果afgh輕,說明答案為a或e。稱量ab,如果相等,答案為e;如果不等,答案為a。
如果afgh重,說明答案在fgh中。稱量fg,如果相等,答案為h;如果不等,重者為答案。
如果一樣重,答案在bcd中。稱量bc,如果相等,答案為d;如果不等,輕者為答案。
情形三:
abcd重。
在efgh中取出fgh,替換掉abcd中的bcd。 在ijkl中取出jkl,補充到原來fgh的位置。
如果afgh重,答案為a或e。稱量ab,如果相等,答案為e;如果不等,答案為a。
如果afgh輕,答案在fgh中。稱量fg,如果相等,答案為h;如果不等,輕者為所求。
如果一樣重,答案在bcd中。稱量bc,如果相等,答案為d;如果不等,重者為答案。
至于13個球的稱法,至今本人仍沒想出來。望高手賜教。onefi@frontfree.net
總結:(轉載)
天平稱重,有兩個托盤比較輕重,加上托盤外面,也就是每次稱重有3個結果,就是ln3/ln2比特信息。n個球要知道其中一個不同的球,如果知道那個不同重量的球是輕還是重,找出來的話那就是n個結果中的一種,就是有ln(n)/ln2比特信息,如果不知道輕重,找出來就是2n(n個球中的一個,輕或者重,所以是2n)個結果中的一種,那就是ln(2n)/ln2比特信息。
| 假設我們要稱k次,根據信息理論,那顯然兩種情況就分別有: | |
| 1. | k*ln3/ln2>=ln(n)/ln2 (k>=1) 解得k>=ln(n)/ln3 |
| 2. | k*ln3/ln2>=ln(2n)/ln2 (k>1) 解得k>=ln(2n)/ln3 |
| 這是得到下限,可以很輕易證明滿足條件的最小正整數k就是所求。比如稱3次知道輕重可以從3^3=27個球中找出不同的球出來,如果不知道輕重就只能從(3^3-1)/2=13個球中找出不同的球出來。 | |
總結
以上是生活随笔為你收集整理的Microsoft程序员测试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 效率!效率!效率!
- 下一篇: ASP.Net中自定义Http处理及应用