前言
大家在面試的時候,難免會遇到讓人摸不着頭腦的邏輯題,這類題目讓同學們往往連答案應該回答些什么都摸不清楚,只能和面試官四目相對,非常尷尬。
其實,很多面試的考官,都是從題庫隨機挑選邏輯題來考驗同學們,面試官有時候自己也未必完全摸透這類題目,所以面試的時候不必過於緊張,就算答不出來啊也非常正常。
在我的理解中,這類題目主要還是考大家的思路,至於答案標准與否,其實不是特別重要。
本文總結了面試中我自己面試中遇到的幾道非常常見的邏輯題,大家可以作為面試前的突擊復習材料。
面試知識點復習手冊
此文屬於Java后端知識點復習手冊專欄內容
全復習手冊文章導航:通過以下兩種途徑查看
- 關注我的公眾號:Rude3Knife 下方導航欄:Java面試復習手冊
- 全復習手冊文章導航(CSDN)
-----正文開始-----
紅白帽子推理
18年秋招今日頭條二面原題(by:Rude3Knife)
題目描述
一群人開舞會,每人頭上都戴着一頂帽子。帽子只有黑白兩種,黑的至少有一頂。每個人都能看到其它人帽子的顏色,卻看不到自己的。主持人先讓大家看看別人頭上戴的是什么帽子,然后關燈,如果有人認為自己戴的是黑帽子,就打自己一個耳光。第一次關燈,沒有聲音。於是再開燈,大家再看一遍,關燈時仍然鴉雀無聲。一直到第三次關燈,才有劈劈啪啪打耳光的聲音響起。問有多少人戴着黑帽子?
答案
三個人
若是兩個人,設A、B是黑帽子,第二次關燈就會有人打耳光。原因是A看到B第一次沒打耳光,就知道B也一定看到了有帶黑帽子的人,可A除了知道B帶黑帽子外,其他人都是白帽子,就可推出他自己是帶黑帽子的人!同理B也是這么想的,這樣第二次熄燈會有兩個耳光的聲音。
如果是三個人,A,B,C。A第一次沒打耳光,因為他看到B,C都是帶黑帽子的;而且假設自己帶的是白帽子,這樣只有BC戴的是黑帽子;按照只有兩個人帶黑帽子的推論,第二次應該有人打耳光;可第二次卻沒有...於是他知道B和C一定看到了除BC之外的其他人帶了黑帽子,於是他知道BC看到的那個人一定是他,所以第三次有三個人打了自己一個耳光
拓展
N個人是黑帽子,就會在第N天,有N個人打自己一個耳光。
吃葯片
18年秋招網易測試開發一面原題(by:Rude3Knife)
題目描述
一個是兩種葯片,每種有兩個,一個人需要早上吃兩種葯片各一個,現在這四個葯片混在一起了這個人什么方法吃。
答案
把所有的4顆葯丸都切開成相等的兩半,然后早上和晚上,分別吃掉每顆葯丸的一半
得到指定容量的水
18年秋招網易測試開發一面原題(by:Rude3Knife)
題目描述
一個5L,一個6L的瓶子,要得到3L的水,問什么方法
答案
6-5=1 1L水放在5L那個瓶里面,然后再裝6L水,往5L(里面已經有1L)里面倒,這樣就會剩下2L水在6L里面,再把2L水放在5L里面,再裝一次,不就可以6L那里到處3L水到5L里面,自己就剩下3L了
老鼠/犯人喝酒試毒
題目描述
一共1000瓶酒,其中一瓶有毒。如果一只老鼠喝了有毒的酒,會在一天之后死亡,那么如果給你一天時間,然你判定哪瓶酒有毒,至少需要幾只老鼠?
答案
答案是10只。這個需要使用二進制編碼來解決,1000瓶酒至少需要10位二進制數來進行編碼。然后取十只杯子分別代表這是個二進制數的十個位,分別將1000瓶酒倒入其編碼為1的對應的杯子中。取十個老鼠分別喝十個杯子中的酒,一天之后,就可以根據喝哪些杯子的老鼠死掉來確定出有毒的那瓶酒的編碼,從而確定哪瓶酒有毒。其根據就是只有有毒酒的編碼對應的毒死老鼠的杯子位置。這個題目就是利用了二進制編碼的一些特性。
拓展
還有一些其他的題目也使用這些特性,比如使用特殊的位運算,一般使用比較多的位運算就是與、或和異或。
這樣,就可以對應到現實生活中的一些為題,比如一個類似的問題原本我們想需要用900多台服務器來解決,經過這樣分析后就可以使用10台服務器來解決,大大節約了成本。
再比如,國王有10000桶酒,已知一桶酒有毒,喝了之后一定會在23-24小時內死亡(例如0點喝,會在23-第二天0點這個時間段死亡)。現在國王要在48小時后舉辦一個宴會,需要用罪犯實驗,請問最少幾個罪犯。(可以混合酒)
如果是常規利用二進制解題的話,那就需要14個犯人,2^14=16384>10000,但是這樣一來死亡時間這個條件就用不到,也不是最優解。
應該利用酒死的時間是固定的,一個罪犯像上面那樣可以表示成25種狀態,三個罪犯就可以表示25 x 25 x25種狀態,超過10000了,所以只需要三個罪犯。
小球稱重
題目描述
有8個小球,其中七個的重量是相同的,有一個較輕。給你一個天平,問秤幾次能找出那個較輕的小球,若天平只能秤兩次,又該怎么秤
答案
第一次兩邊各放隨機三個,如果平了,則另外一個是輕的,若不平,還有第二次,拿出那三個輕的,在兩邊隨機放一個,就能測出哪個最輕了。
飛機加油
18年秋招騰訊測試開發一面原題(by:蠻三刀把刀)
本體圖解參考:
https://blog.csdn.net/hinyunsin/article/details/6632062
題目描述
已知: 每個飛機只有一個油箱,飛機之間可以相互加油(注意是相互,沒有單獨的加油機),一箱油可供一架飛機繞地球飛半圈
問題:為使至少一架飛機繞地球一圈回到起飛時的飛機場,至少需要出動幾架飛機?(所有飛機從同一機場起飛,而且必須安全返回機場,不允許中途降落,中間沒有飛機場)
答案
分為3架飛機5架次和3架飛機6架次
1. 3架飛機6架次
(上圖)ABC 3架同時起飛
(上圖)1/8處,C給AB加滿油,C返航。此時飛機的油量分別是:A: 3/4, B: 3/4, C: 3/4。此時C分別給A和B加滿油,三架飛機當前油量分別是:A: 1, B: 1, C: 1/4。C返回機場。A、B繼續向前飛行。
(上圖)1/4處,B給A加滿油,B返航,A到達1/2處,此時C已經返回機場,三家飛機此時油量分別是:A: 3/4, B: 3/4, C: 0。此時B給A加滿油,C加滿油,此時三架飛機的油量分別是:A: 1, B: 1/2, C: 1。然后B返回機場,A繼續向前飛行。
(上圖)當A飛行至半圈位置時,B已經返回機場並且加滿了油(假設加油時間為0),此時,B和C沿逆時針方向飛行,三架飛機當前油量分別是:A: 1/2, B: 1, C: 1。A繼續向前飛行。
(上圖)當A飛行至另外半圈的1/4位置時,三架飛機剩余油量分別是:A: 1/4, B: 3/4, C: 3/4。此時,C給B加滿油。此時三架飛機油量分別是:A: 1/4, B: 1, C: 1/2。C返回機場,B和A繼續向前飛行。
當A飛行至另外半圈的1/2位置時,C已經返回機場,A和B相遇,此時三架飛機剩余油量分別是:A: 0, B: 3/4, C: 0。B給A加1/4的油,三架飛機剩余油量:A: 1/4, B: 1/2, C: 1。C加滿油從機場逆時針飛出,B返回機場,A繼續向前飛行。
(上圖)當A飛行至另外半圈的3/4位置時,A和C相遇。此時三架飛機的油量分別是:A: 0, B: 1/4, C: 3/4。C給A加1/4的油,此時三架飛機的油量分別是:A: 1/4, B: 1/4, C: 1/2。C掉頭返回機場,A和B繼續向前飛行。
(上圖)三架飛機順利回到機場!
2. 3飛機5架次
(1)3 架飛機同時從機場出發,飛行八分之一周(A點),各耗油四分之一。此時某架飛機給其余兩架補滿油,自己返回基地;
(2)另一架飛機和目標機結伴,飛至四分之一周(B點),給目標機補滿油,自己返回;
(3)目標機獨自飛行半周(C點);
(4)與從基地反向出發的一架飛機相遇,2 機將油平分,飛至最后八分之一處(D點);
(5)與從基地反向出發的另一機相遇,各分四分之一油,返回。
拓展閱讀
75道程序員面試邏輯題和答案
https://blog.csdn.net/qq_38361726/article/details/79824632
-----正文結束-----
全復習手冊文章導航:通過以下兩種途徑查看
- 關注我的公眾號:Rude3Knife 下方導航欄:Java面試復習手冊
- 全復習手冊文章導航(CSDN)
復習手冊文章推薦
- Java基礎知識點面試手冊
- Java容器(List、Set、Map)知識點快速復習手冊
- Java並發知識點快速復習手冊(上)
- Java並發知識點快速復習手冊(下)
- Java虛擬機知識點快速復習手冊(上)
- Java虛擬機知識點快速復習手冊(下)
- 快速梳理23種常用的設計模式
- Redis基礎知識點面試手冊
- 面試常問的小算法總結
- 查找算法總結及其部分算法實現Python/Java
- 排序算法最強總結及其代碼實現(Python/Java)
- HTTP應知應會知識點復習手冊(上)
- HTTP應知應會知識點復習手冊(下)
- 計算機網絡基礎知識點快速復習手冊
- 海量數據處理問題知識點復習手冊
- ......等(請查看全復習手冊導航)
關注我
我目前是一名后端開發工程師。主要關注后端開發,數據安全,網絡爬蟲,物聯網,邊緣計算等方向。
微信:yangzd1102
Github:@qqxx6661
個人博客:
- CSDN:@Rude3Knife
- 知乎:@Zhendong
- 簡書:@蠻三刀把刀
- 掘金:@蠻三刀把刀
原創博客主要內容
- Java知識點復習全手冊
- Leetcode算法題解析
- 劍指offer算法題解析
- SpringCloud菜鳥入門實戰系列
- SpringBoot菜鳥入門實戰系列
- Python爬蟲相關技術文章
- 后端開發相關技術文章
個人公眾號:后端技術漫談
如果文章對你有幫助,不妨收藏起來並轉發給您的朋友們~