程序員面試必看30道智力題

二進制問題

金條問題

有個商人僱用了一位手藝高超的工匠了爲他做一個精緻產品,工作一星期七天的代價是一條金條。商人手頭上有一條金條,剛好有可以付工匠一星期的工錢。但工匠要求工錢要按每天來付。雖然他並不急着用錢,每天有錢進賬,老人心裏總是踏實一些。但商人家中有個規矩,金條每星期只能切二刀。後來商人想出以了個切割金條的辦法,滿足了工匠的要求。你知道商人是怎麼切割金條才能滿足工匠的嗎?

切成1、2、4。這三個二進制數的組合能表示0-7中的任何一個。


老鼠和毒藥

實驗室有100個瓶子,其中有一瓶裝有慢性毒藥(第3天發作),另外99瓶裝有蒸餾水。請問至少需要多少隻小白鼠才能在3天內找出哪一瓶是慢性毒藥?

利用二進制來做,最少的老鼠數量就是計算2的多少次方大於等於瓶子數量,例如本題爲7。對100瓶進行二進制編碼,這樣可以排列出1xxxxxx,x1xxxxxx,…,xxxxxx1這樣的七組序列,如果是1xxxxxx和x1xxxxx的老鼠死了,表示1100000有毒。


水桶問題

倒水問題1

一個裝了10L水的桶,一個7L的空桶,一個3L的空桶,怎樣變成2個5L

初始時爲10,0,0。
第二步7,0,3。
然後7,3,0。
然後4,3,3。
然後4,6,0。
然後1,6,3。
然後1,7,2。
然後8,0,2。
然後8,2,0。
然後5,2,3。
然後5,5,0。


倒水問題2

如果你有無窮多的水,一個3夸脫的和一個5夸脫的提桶,你如何準確稱出 4夸脫的水?

初始時0,5
然後3,2
然後0,2
然後2,0
然後2,5
然後1,4


舀酒問題

據說有人給酒肆的老闆娘出了一個難題:此人明明知道店裏只有兩個舀酒的勺子,分別能舀7兩和11兩酒,卻硬要老闆娘賣給他2兩酒。聰明的老闆娘毫不含糊,用這兩個勺子在酒缸裏舀酒,並倒來倒去,居然量出了2兩酒,聰明的你能做到嗎?

初始0,11
然後7,4
然後0,4
然後4,0
然後4,11
然後7,8
然後0,8
然後7,1
然後0,1
------
然後1,11
然後7,5
然後0,5
然後5,0
然後5,11,
然後7,9
然後0,9
然後7,2


錢問題

賺錢問題

一個人花8塊錢買了一隻雞,9塊錢賣掉了,然後他覺得不划算,花10塊錢又買回來了,11塊賣給另外一個人。問他賺了多少?

-8+9-10+11=2


假錢問題

老王30買了雙鞋,35賣,客人花100買,老王沒零錢於是向老李換了100.補給客人後,客人走遠後老李突然說是假錢,於是老王補償給了老李,問老王一共虧了多少?

賣鞋賺了35-30=5
假錢賠了100
一共虧95


取硬幣問題

30枚面值不全相同的硬幣擺成一排,甲、乙兩個人輪流選擇這排硬幣的其中一端,並取走最外邊的那枚硬幣。如果你先取硬幣,能保證得到的錢不會比對手少嗎?

先取者可以讓自己總是取奇數位置上的硬幣或者總是取偶數位置上的硬幣。數一數是奇數位置上的面值總和多還是偶數位置上的面值總和多,然後總是取這些位置上的硬幣就可以了。


旅館問題

有三個人去住旅館,住三間房,每一間房$10元,於是他們一共付給老闆$30,第二天,老闆覺得三間房只需要$25元就夠了於是叫小弟退回$5給三位客人,誰知小弟貪心,只退回每人$1,自己偷偷拿了$2,這樣一來便等於那三位客人每人各花了九元,於是三個人一共花了$27,再加上小弟獨吞了不$2,總共是$29。可是當初他們三個人一共付出$30那麼還有$1呢?

他們所消費的27元裏已經包括小弟貪污的2元了,再加退還的3元=30元。:這30元現在的分佈是:老闆拿25元,夥計拿2元,三人各拿1元,正好!


藍眼問題

藍眼睛問題

有個島上住着一羣人,有一天來了個遊客,定了一條奇怪的規矩:所有藍眼睛的人都必須儘快離開這個島。每晚8點會有一個航班離島。每個人都看得見別人眼睛的顏色,但不知道自己的(別人也不可以告知)。此外,他們不知道島上到底有多少人是藍眼睛的,只知道至少有一個人的眼睛是藍色的。所有藍眼睛的人要花幾天才能離開這個島?

有多少個藍眼睛的人就會花多少天。

c=1
假設島上所有人都是聰明的,藍眼睛的人四處觀察之後,發現沒有人是藍眼睛的。但他知道至少有一人是藍眼睛的,於是就能推導出自己一定是藍眼睛的。因此,他會搭乘當晚的飛機離開。

c=2
兩個藍眼睛的人看到對方,並不確定c是1還是2,但是由上一種情況,他們知道,如果c = 1,那個藍眼睛的人第一晚就會離島。因此,發現另一個藍眼睛的人仍在島上,他一定能推斷出c = 2,也就意味着他自己也是藍眼睛的。於是,兩個藍眼睛的人都會在第二晚離島。

c>2
逐步提高c時,我們可以看出上述邏輯仍舊適用。如果c = 3,那麼,這三個人會立即意識到有2到3人是藍眼睛的。如果有兩人是藍眼睛的,那麼這兩人會在第二晚離島。因此,如果過了第二晚另外兩人還在島上,每個藍眼睛的人都能推斷出c = 3,因此這三人都有藍眼睛。他們會在第三晚離島。

不論c爲什麼值,都可以套用這個模式。所以,如果有c人是藍眼睛的,則所有藍眼睛的人要用c晚才能離島,且都在同一晚離開。


瘋狗問題(跟藍眼睛一樣)

有50家人家,每家一條狗。有一天警察通知,50條狗當中有病狗,行爲和正常狗不一樣。每人只能通過觀察別人家的狗來判斷自己家的狗是否生病,而不能看自己家的狗,如果判斷出自己家的狗病了,就必須當天一槍打死自己家的狗。結果,第一天沒有槍聲,第二天沒有槍聲,第三天開始一陣槍響,問:一共死了幾條狗?

死了3條(第幾天槍響就有幾條)。
從有一條不正常的狗開始,顯然第一天將會聽到一聲槍響。這裏的要點是你只需站在那條不正常狗的主人的角度考慮。
有兩條的話思路繼續,只考慮有兩條不正常狗的人,其餘人無需考慮。通過第一天他們瞭解了對方的信息。第二天殺死自己的狗。換句話說每個人需要一天的時間證明自己的狗是正常的。有三條的話,同樣只考慮那三個人,其中每一個人需要兩天的時間證明自己的狗是正常的狗。


耳光問題(跟藍眼睛一樣)

一羣人開舞會,每人頭上都戴着一頂帽子。帽子只有黑白兩種,黑的至少有一頂。每個人都能看到其他人帽子的顏色,卻看不到自己的。主持人先讓大家看看別人頭上戴的是什麼帽子,然後關燈,如果有人認爲自己戴的是黑帽子,就打自己一個耳光。第一次關燈,沒有聲音。於是再開燈,大家再看一遍,關燈時仍然鴉雀無聲。一直到第三次關燈,纔有劈劈啪啪打耳光的聲音響起。問有多少人戴着黑帽子?
答案:有三個人戴黑帽。假設有N個人戴黑帽,當N=1時,戴黑帽的人看見別人都爲白則能肯定自己爲黑。於是第一次關燈就應該有聲。可以斷定N>1。對於每個戴黑帽的人來說,他能看見N-1頂黑帽,並由此假定自己爲白。但等待N-1次還沒有人打自己以後,每個戴黑人都能知道自己也是黑的了。所以第N次關燈就有N個人打自己。


時間問題

蠟燭燃燒問題

兩根蠟燭,燃燒完都需要1小時,怎麼確定15分鐘是多久?

點燃第一根的一端,第二根的兩端。
第二根燒完代表半小時後,點燃第一根另一端,燒完代表15分鐘。


重量問題

乒乓球重量

8個乒乓球,其中一個重,有一個秤,問至少幾次能夠找出重的那個乒乓球

2次,分成3堆,3,3,2。
①稱3和3,如果一樣重,代表重的在2。②稱2個那一堆的。
①稱3和3,不一樣重,重的在3裏面重的那堆。②3個裏面隨便取2個,一樣重,第三個重。不一樣重,重的那個就是。


鹽重量問題

有7克、2克砝碼各一個,天平一隻,如何只用這些物品五次內將140克的鹽分成50、90克各一份?

第一次:先分成70和70
第二次:通過7和2砝碼將70分成9和61
第三次:通過9克鹽和2砝碼將61分成50和11


藥丸問題

有20瓶藥丸,其中19瓶裝有1克/粒的藥丸,餘下一瓶裝有1.1克/粒的藥丸。給你一臺稱重精準的天平,怎麼找出比較重的那瓶藥丸?天平只能用一次。

從藥瓶#1取出一粒藥丸,從藥瓶#2取出兩粒,從藥瓶#3取出三粒,依此類推。如果每粒藥丸均重1克,則稱得總重量爲210克(1 + 2 + … + 20 = 20 * 21 / 2 = 210),“多出來的”重量必定來自每粒多0.1克的藥丸。

藥瓶的編號可由算式(weight - 210) / 0.1 得出。因此,若這堆藥丸稱得重量爲211.3克,則藥瓶#13裝有較重的藥丸。

藥丸問題2

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

答:從第一盒中取出一顆,第二盒中取出2 顆,第三盒中取出三顆。 依次類推,稱其總量。減去10,多的數字就是藥丸罐子序號。


數學問題

概率問題1

一個家庭有兩個小孩,其中有一個是女孩,問另一個也是女孩的概率(假定生男生女的概率一樣)

1/3
樣本空間爲(男男)(女女)(男女)(女男)
A=(已知其中一個是女孩)=)(女女)(男女)(女男)
B=(另一個也是女孩)=(女女)
於是P(B/A)=P(AB)/P(A)=(1/4)/(3/4)=1/3


概率問題2

你有兩個罐子,每個罐子各有若干紅色彈球和藍色彈球,兩個罐子共有50個紅色彈球,50個藍色彈球,隨機選出一個罐子,隨機從中選取出一個彈球,要使取出的是紅球的概率最大,一開始兩個罐子應放幾個紅球,幾個藍球?在你的計劃中,得到紅球的準確機率是多少?

一個罐子放1紅,一個罐子放49紅和50藍,這樣得到紅球的概率接近3/4。


撲克牌問題

54張撲克牌,其中有十張是翻過來的。現在把你的眼睛蒙上,讓你把撲克牌分成兩疊(兩疊的多少可以不一樣)。要求在兩疊中翻過來的撲克牌是相等的。請問該怎麼做?

第一步,你在這54張牌中任意取出10張,現在,撲克牌分成了兩疊。44張和10張;第二步,44張那疊不動,將10張這疊每張都翻過來,便得到了符合條件的兩疊牌。

解釋:第一步之後,設44張那疊中正面牌x張,10張那疊中正面牌則爲10-x張。第二步之後,44張那疊中正面牌保持x張,10張那疊反過來了:反面牌爲10-x張,正面牌x張。


扔雞蛋問題

有棟建築物高100層。若從第N層或更高的樓層扔下來,雞蛋就會破掉。若從第N層以下的樓層扔下來則不會破掉。給你2個雞蛋,請找出N,並要求最差情況下扔雞蛋的次數爲最少。

14次

首先,讓我們試着從10層開始扔雞蛋,然後是20層,等等。
如果雞蛋1第一次扔下樓(10層)就破掉了,那麼,最多需要扔10次。
如果雞蛋1最後一次扔下樓(100層)才破掉,那麼,最多要扔19次(10、20、…、90、100層,然後是91到99層)。
這麼做也挺不錯,但我們只考慮了絕對最差情況。我們應該進行“負載均衡”,讓這兩種情況下扔雞蛋的次數更均勻。 我們的目標是設計一種扔雞蛋的方法,使得扔雞蛋1時,不論是在第一次還是最後一次扔下樓才破掉,次數越穩定越好。
(1) 完美負載均衡的方法應該是,扔雞蛋1的次數加上扔雞蛋2的次數,不論什麼時候都一樣,不管雞蛋1是從哪層樓扔下時破掉的。
(2) 若有這種扔法,每次雞蛋1多扔一次,雞蛋2就可以少扔一次。
(3) 因此,每丟一次雞蛋1,就應該減少雞蛋2可能需要扔下樓的次數。例如,如果雞蛋1先從20層往下扔(不破),然後從30層扔下樓(破),此時雞蛋2可能就要扔9次(從21到29 一次次試)。若雞蛋1再扔一次,我們必須讓雞蛋2扔下樓的次數降爲8次。也就是說,我們必須讓雞蛋1從39層扔下樓。
(4) 由此可知,雞蛋1必須從X層開始往下扔,然後再往上增加X-1層……直至到達100層。
(5) 求解方程式X + (X-1) + (X-2) + … + 1 = 100,得到X (X + 1) / 2 = 100 → X = 14。 (直接設要X次,假如X 和X-1這兩次了 則再加X-2 總共還是X次, 次數總爲X)
我們先從14層開始,然後是27層,接着是39層,依此類推,最差情況下雞蛋要扔14次。

其他情況也是一樣的只需要求X (X + 1) / 2 = 樓層數量的X大約值即可。


填數字

0 1 2 3 4 5 6 7 8 9
_ _ _ _ _ _ _ _ _ _ 在橫線上填寫數字,使之符合要求。
要求如下:對應的數字下填入的數,代表上面的數在下面出現的次數,比如3下面是1,代表3要在下面出現一次。

正確答案是: 6 2 1 0 0 0 1 0 0 0


規律

1,11,21,1211,111221,下一個數是什麼?

下行是對上一行的解釋 所以新的應該是3個1 2個2 1個1 :312211


猜數字問題

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

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是唯一解。


其他問題

水果標籤問題

3個箱子裏面放了 蘋果,梨子,蘋果加梨子,標籤全錯誤,只能選擇查看一箱的水果來改正所有標籤

查看貼蘋果和梨標籤那一個,如果拿出來的是蘋果,代表這一箱只有蘋果,因爲如果是蘋果和梨就代表標籤沒錯了。
那麼剩下的兩箱就是梨,蘋果和梨,剩下的標籤是梨,蘋果,由於標籤全錯,所以貼着蘋果的是梨,貼着梨的是蘋果和梨。
如果拿出來的是梨,同理代表這一箱只有梨。那麼剩下的兩箱就是蘋果,蘋果和梨,剩下的標籤就是蘋果,梨。由於標籤全錯,貼着蘋果的就是蘋果和梨,貼着梨的就是蘋果。


便士標籤問題(和水果標籤一樣)

假設在桌上有三個密封的盒,一個盒中有2枚銀幣(1銀幣=10便士),一個盒中有2枚鎳幣(1鎳幣=5便士),還有一個盒中有1枚銀幣和1枚鎳幣。這些盒子被標上10便士、 15便士和20便士,但每個標籤都是錯誤的。允許你從一個盒中拿出1枚硬幣放在盒前,看到這枚硬幣,你能否說出每個盒內裝的東西呢?


吃藥問題

某種藥方要求非常嚴格,你每天需要同時服用A、B兩種藥片各一顆,不能多也不能少。這種藥非常貴,你不希望有任何一點的浪費。一天,你打開裝藥片A的藥瓶,倒出一粒藥片放在手心;然後打開另一個藥瓶,但不小心倒出了兩粒藥片。現在,你手心上有一顆藥片A,兩顆藥片B,並且你無法區別哪個是A,哪個是B。你如何才能嚴格遵循藥方服用藥片,並且不能有任何的浪費?

把手上的三片藥各自切成兩半,分成兩堆擺放。再取出一粒藥片A,也把它切成兩半,然後在每一堆里加上半片的A。現在,每一堆藥片恰好包含兩個半片的A和兩個半片的B。一天服用其中一堆即可。


硬幣問題

如何用一枚硬幣等概率地產生一個1到3之間的隨機整數?如果這枚硬幣是不公正的呢?
答案:如果是公正的硬幣,則投擲兩次,“正反”爲1,“反正”爲2,“正正”爲3,“反反”重來。

如果是不公正的硬幣,注意到出現“正反”和“反正”的概率一樣,因此令“正反反正”、“反正正反”、“正反正反”分別爲1、2、3,其餘情況重來。另一種更妙的辦法是,投擲三次硬幣,“正反反”爲1,“反正反”爲2,“反反正”爲3,其餘情況重來。


燈管問題

在房裏有三盞燈,房外有三個開關,在房外看不見房內的情況,你只能進門一次,你用什麼方法來區分那個開關控制那一盞燈?

打開一個開關。過10分鐘後關掉開關,並打開另一個開關。進屋確認可知:
亮的燈是由第二次打開的開關控制;
摸上去發熱的不發亮的燈是由第一次打開的開關控制
剩下的第三盞燈是由未操作過的開關控制。


盲人問題

他們都各自買了兩對黑襪和兩對白襪,八對襪了的布質、大小完全相同,而每對襪了都有一張商標紙連着。兩位盲人不小心將八對襪了混在一起。 他們每人怎樣才能取回黑襪和白襪各兩對呢?

每一對分開,一人拿一隻,因爲襪子不分左右腳


最大鑽石問題

一樓到十樓的每層電梯門口都放着一顆鑽石,鑽石大小不一。你乘坐電梯從一樓到十樓,每層樓電梯門都會打開一次,只能拿一次鑽石,問怎樣才能拿到最大的一顆?

選擇前五層樓都不拿,觀察各層鑽石的大小,做到心中有數。後面五個樓層再選擇,選擇大小接近前五層樓出現過最大鑽石大小的鑽石。


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