精選程序員面試常問的邏輯題

前言

你們在面試的時候,不免會遇到讓人摸不着頭腦的邏輯題,這類題目讓同窗們每每連答案應該回答些什麼都摸不清楚,只能和麪試官四目相對,很是尷尬。git

其實,不少面試的考官,都是從題庫隨機挑選邏輯題來考驗同窗們,面試官有時候本身也未必徹底摸透這類題目,因此面試的時候沒必要過於緊張,就算答不出來啊也很是正常。程序員

在個人理解中,這類題目主要仍是考你們的思路,至於答案標準與否,其實不是特別重要。github

本文總結了面試中我本身面試中遇到的幾道很是常見的邏輯題,你們能夠做爲面試前的突擊複習材料。面試

面試知識點複習手冊

此文屬於Java後端知識點複習手冊專欄內容算法

全複習手冊文章導航:經過如下兩種途徑查看後端

-----正文開始-----

紅白帽子推理

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:蠻三刀把刀)

本體圖解參考:

blog.csdn.net/hinyunsin/a…

題目描述

已知: 每一個飛機只有一個油箱,飛機之間能夠相互加油(注意是相互,沒有單獨的加油機),一箱油可供一架飛機繞地球飛半圈

問題:爲使至少一架飛機繞地球一圈回到起飛時的飛機場,至少須要出動幾架飛機?(全部飛機從同一機場起飛,並且必須安全返回機場,不容許中途降落,中間沒有飛機場)

答案

分爲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道程序員面試邏輯題和答案

blog.csdn.net/qq_38361726…

-----正文結束-----

全複習手冊文章導航:經過如下兩種途徑查看

複習手冊文章推薦

關注我

我目前是一名後端開發工程師。主要關注後端開發,數據安全,網絡爬蟲,物聯網,邊緣計算等方向。

微信:yangzd1102

Github:@qqxx6661

我的博客:

原創博客主要內容

  • Java知識點複習全手冊
  • Leetcode算法題解析
  • 劍指offer算法題解析
  • SpringCloud菜鳥入門實戰系列
  • SpringBoot菜鳥入門實戰系列
  • Python爬蟲相關技術文章
  • 後端開發相關技術文章

我的公衆號:Rude3Knife

我的公衆號:Rude3Knife

若是文章對你有幫助,不妨收藏起來並轉發給您的朋友們~

相關文章
相關標籤/搜索