前言
大家好,我是 夢想家 Alex 。在我技術群的小夥伴們都知道,我從今年 3月8日 開始,在技術群裡發起了一個計劃 。為了跟其他技術群有所差別,并且能調動得起大家的學習熱情,我成立了一個出題組。每天早上,我會讓管理者在技術群裡的公告欄放上3道題目,分别是1道基礎題,1道思考題和1道智力題,所有的答案均為群友讨論得出。後面為了讓題目更加豐富,我們還添加過算法題,SQL題 。 一直積累到 8月份,這個日更計劃暫時停止,但是我們的題庫已經積攢了不少的題目。一開始我的想法是這個線上的知識庫隻對我們技術群的朋友開放,但是後面想到可以 精選出好的問題開放給更多的朋友,一起參與學習和思考 ,于是我便想到了用文章來記錄的方式來打破壁壘。是以,我開設了“每日主題讨論”專欄,想用有限的文章,為大家帶去更多的思考。本期文章,我為大家帶來的是一點輕松愉快的内容,那便是 常見的智力題集錦

NO.1
一個大小為 N 的數組,所有數都是不超過 N-1 的正整數,用O(N)的時間找出重複的那個數(假設隻有一個)。一個大小為 N 的數組,所有數都是不超過 N+1 的正整數。用O(N)的時間找出沒有出現的那個數(假設隻有一個)。
NO.2
有一輛火車以每小時15公裡的速度離開洛杉矶直奔紐約,另一輛火車以每小時20公裡的速度從紐約開往洛杉矶。如果有一隻鳥,以30公裡每小時的速度和兩輛火車同時啟動,從洛杉矶出發,碰到另一輛車後傳回,依次在兩輛火車來回飛行,直到兩輛火車相遇,請問,這隻小鳥飛行了多長距離?
NO.3
一個獵人帶着一隻羊,一隻狼和一顆白菜回家,路上遇到一條河。河邊隻有一條船,但船太小,一次最多隻能載獵人和另外一樣東西過河。但獵人不在時,狼要吃羊,羊要吃白菜。問怎樣才能把狼,羊,白菜安全運過河?
NO.4
有個商人雇用了一位手藝高超的工匠了為他做一個精緻産品,工作一星期七天的代價是一條金條。商人手頭上有一條金條,剛好有可以付工匠一星期的工錢。但工匠要求工錢要按每天來付。雖然他并不急着用錢,每天有錢進賬,老人心裡總是踏實一些。但商人家中有個規矩,金條每星期隻能切二刀。後來商人想出以了個切割金條的辦法,滿足了工匠的要求。你知道商人是怎麼切割金條才能滿足工匠的嗎?
NO.5
請找出規律:1,11,21,1211,111221,下一個數是什麼?
NO.6
在房裡有三盞燈,房外有三個開關,在房外看不見房内的情況,你隻能進門一次,你用什麼方法來區分那個開關控制那一盞燈?
NO.7
你有四個裝藥丸的罐子,每個藥丸都有一定的重量,被污染的藥丸是沒被污染的重量+1.隻稱量一次,如何判斷哪個罐子的藥被污染了?
NO.8
30枚面值不全相同的硬币擺成一排,甲、乙兩個人輪流選擇這排硬币的其中一端,并取走最外邊的那枚硬币。如果你先取硬币,能保證得到的錢不會比對手少嗎?
NO.9
某種藥方要求非常嚴格,你每天需要同時服用A、B兩種藥片各一顆,不能多也不能少。這種藥非常貴,你不希望有任何一點的浪費。一天,你打開裝藥片A的藥瓶,倒出一粒藥片放在手心;然後打開另一個藥瓶,但不小心倒出了兩粒藥片。現在,你手心上有一顆藥片A,兩顆藥片B,并且你無法差別哪個是A,哪個是B。你如何才能嚴格遵循藥方服用藥片,并且不能有任何的浪費?
NO.10
有棟建築物高100層。若從第N層或更高的樓層扔下來,雞蛋就會破掉。若從第N層以下的樓層扔下來則不會破掉。給你2個雞蛋,請找出N,并要求最差情況下扔雞蛋的次數為最少?
NO.11
有7克、2克砝碼各一個,天平一隻,如何隻用這些物品五次内将140克的鹽分成50、90克各一份?
NO.12
有20瓶藥丸,其中19瓶裝有1克/粒的藥丸,餘下一瓶裝有1.1克/粒的藥丸。給你一台稱重精準的天平,怎麼找出比較重的那瓶藥丸?天平隻能用一次。
NO.13
一個裝了10L水的桶,一個7L的空桶,一個3L的空桶,怎樣變成2個5L
NO.14
實驗室裡有1000個一模一樣的瓶子,但是其中的一瓶有毒。可以用實驗室的小白鼠來測試哪一瓶是毒藥。如果小白鼠喝掉毒藥的話,會在一個星期的時候死去,其他瓶子裡的藥水沒有任何副作用。請問最少用多少隻小白鼠可以在一個星期以内查出哪瓶是毒藥
NO.15
有兩根不均勻分布的香,香燒完的時間是一個小時,你能用什麼方法來确定一段15分鐘的時間 。
NO.16
島上有 100 個囚犯,他們都是藍眼睛,但是他們都隻能看到别人眼睛的顔色, 并不能知道自己的眼睛顔色,而且他們之間不能去談論眼睛顔色的話題,規定每天晚上都可 以有一個人去找守衛說出自己的眼睛顔色,如果錯了被殺死,如果對了被釋放。但是大家在 沒有十足的把握前都不敢去找守衛,有一天,一個醫生對他們說你們之中至少有一個藍眼睛, 然後 N 天,這些人都獲救了,為什麼?這句話對他們有什麼影響 ?
NO.17
54張撲克牌,其中有十張是翻過來的。現在把你的眼睛蒙上,讓你把撲克牌分成兩疊(兩疊的多少可以不一樣)。要求在兩疊中翻過來的撲克牌是相等的。請問該怎麼做?
NO18.
古時候有一位商人要讓夥計将一個精緻的花瓶送到買主的手裡。買主住在很遠的地方,路途中間要經過土匪出沒的地方。土匪要是見到花瓶就會搶走。但土匪不會打開鎖着的東西,隻要把花瓶鎖在箱子裡就可以安全地送到目的地(這土匪看起來還很文明)。是以商人準備了一個大箱子,在箱子上裝了個很大很結實的的鎖扣,足以挂幾把鎖。商人還準備了一把精緻的鐵鎖将花瓶鎖在箱子裡。這把鐵鎖的鑰匙是獨一無二的,沒有這把鑰匙,按照當時的技術箱子是絕對打不開的。但問題來了,土匪隻要見到鑰匙就會沒收。鑰匙都是沒法安全地送到買主的手裡的。買主也不能把自己的鎖送給賣主用。在幾經周折後,買主終于得到了他心愛的花瓶。請問這花瓶是如何送到買主的手裡的?
NO.19
假設在桌上有三個密封的盒,一個盒中有2枚銀币(1銀币=10便士),一個盒中有2枚鎳币(1鎳币=5便士),還有一個盒中有1枚銀币和1枚鎳币。這些盒子被标上10便士、 15便士和20便士,但每個标簽都是錯誤的。允許你從一個盒中拿出1枚硬币放在盒前,看到這枚硬币,你能否說出每個盒内裝的東西呢?
NO.20
有50家人家,每家一條狗。有一天警察通知,50條狗當中有病狗,行為和正常狗不一樣。每人隻能通過觀察别人家的狗來判斷自己家的狗是否生病,而不能看自己家的狗,如果判斷出自己家的狗病了,就必須當天一槍打死自己家的狗。結果,第一天沒有,第二天沒有,第三天開始一陣槍響,問:一共死了幾條狗?
NO.21
有兩位盲人,他們都各自買了兩對黑襪和兩對白襪,八對襪子的布質、大小完全相同,而每對襪子都有一張商标紙連着。兩位盲人不小心将八對襪子混在一起。他們每人怎樣才能取回黑襪和白襪各兩對呢?
NO.22
走廊上有100個關上的儲物櫃。有個人先是将100個櫃子全都打開。接着,每數兩個櫃子關上一個。然後,在第三輪時,再每隔兩個就切換第三個櫃子的開關狀态(也就是将關上的櫃子打開,将打開的關上)。照此規律反複操作100次,在第 i 輪,這個人會每數 i 個就切換第 i 個櫃子的狀态。當第100 輪經過走廊時,隻切換第100個櫃子的開關狀态,此時有幾個櫃子是開着的 ?
OK,以上就是我從技術群題庫裡精選出來關于智力題的集錦,不知道大家能回答上來幾道題呢~
接下來,我就要揭秘答案了
答案
NO1.
計算數組中的所有數的和,再計算出從1 到 N-1 的所有數的和,兩者之差即為重複的那個數。計算數組中的所有數的和,再計算出從1到 N+1的所有數的和,兩者之差即為缺少的那個數。
NO2.
不用考慮小鳥掉頭的情況
實際飛行距離 = 兩車相遇時間間隔 * 小鳥飛行速度
假設兩地相距的距離為 x,那麼兩車相遇的時間間隔為
x
(
15
+
20
)
\frac{x}{(15+20)}
(15+20)x
小鳥飛行的距離為 數學公式: $ \frac{x}{(15+20)} * 30 $ ,也就是
6
x
7
\frac{6x}{7}
76x
NO3.
第一次過河,帶羊;
回來;
第二次過河,帶狼;
帶羊回來;
第三次過河,帶白菜;
第四次過河,帶羊
NO4.
切兩刀,
1,2,4三段
第一天給1,
第二天給2要回1,
第三天給1+2,
第四天給4,要回1+2
…
NO5.
奇數位: 表示數字的個數,
偶數位: 表示數字
1
11:代表上個數字1個1
21:代表上個數字2個1
1211:代表上個數字1個2,1個1
111221:代表上個數字是1個1,1個2,2個1。
是以下個數字應該是:
312211
NO6.
先在門外開啟一個開關,讓燈亮一會兒,再關閉,接着再開啟一個開關,讓燈一直亮着,進入房門,亮着的燈的開關知道了,然後再用手摸一下,那個燈泡是熱的,就知道另外一個開關,最後就是最後一個開關了。
NO7.
設未被污染的每個藥丸的重量是x,則被污染的每個藥丸的重量是x+1。将4個罐子分别标注為1、2、3、4,取一号罐子1個藥丸,二号罐子2個藥丸,三号罐子3個藥丸,四号罐子4個藥丸,一起稱重,則:
若一号罐子藥丸被污染,則重量為(10x+1)
若二号罐子藥丸被污染,則重量為(10x+2)
若三号罐子藥丸被污染,則重量為(10x+3)
若四号罐子藥丸被污染,則重量為(10x+4)
結論:不論哪種情況,我們隻需要對10取模,即可得到結果
NO8.
取者可以讓自己總是取奇數位置上的硬币或者總是取偶數位置上的硬币。數一數是奇數位置上的面值總和多還是偶數位置上的面值總和多,然後總是取這些位置上的硬币就可以了。
NO9.
把三顆藥丸都分成兩半,從每一顆都拿一半出來分成兩份,這樣每份就包含一顆B和半顆A,然後再去A藥片裡面拿一顆分成兩半放入剛分好的兩份中就可以滿足題意
NO10.
①假設最壞情況下得到的下落次數為x,那麼第一枚雞蛋從哪層扔好呢,顯然是x。因為這樣如果在第x層碎了,那麼第二枚雞蛋需要x-1次确定N,加上第一枚的一次,就是x次。那假如沒碎呢,第二次我又從哪層扔呢,自然是x+(x-1)層。因為這樣如果第一枚在這層碎了,那第二枚就需要x-2次确定N,總共是x-2+2=x次,以此類推,而總共又隻有100層,得到一個不等式x+(x-1)+(x-2)+…+1 >= 100解得x=14
②動态規劃:
當第一個雞蛋從第x層扔時,用(k,n)表示狀态,其中 k 為雞蛋數,n 為樓層數
- 如果雞蛋不碎,那麼狀态變成 (k, n-x),即我們雞蛋的數目不變,但答案隻可能在上方的 n-x層樓了。原問題縮小成了一個規模為 (k, n-x) 的子問題
- 如果雞蛋碎了,那麼狀态變成 (k-1, x-1),即我們少了一個雞蛋,但我們知道答案隻可能在第 x 樓下方的 x-1層樓中了。原問題縮小成了一個規模為 (k-1, x-1) 的子問題
NO11.
最佳解法:
①把140g鹽均分得到兩份70g
②7g+2g砝碼與70g鹽-> 9g鹽和61g鹽
③9g鹽+2g砝碼與61g鹽->50g鹽。
NO12.
首先給藥瓶編号1至20,然後對應取出編号數量的藥丸稱重。
如果所有藥瓶都是1克,那最後總重量應該是1+2+…+20=210克,根據題意,最後重量m肯定肯定大于210克。而多出來的重量一定是出自1. 1克的那瓶。于是用m減去210,再除以1. 1-1=0. 1就可以得到對應1. 1克那瓶的編号
NO13.
過程 | 10L(A) | 7L(B) | 3L(C) |
初始 | 10 | ||
A->B->C | 3 | 4 | |
C->A | |||
B->C | |||
9 | |||
A->B | 2 | ||
5 | |||
NO14.
首先給1000瓶子按10位二進制編号,然後最右位為1的瓶子喂給1号老鼠,右起第二位是1的瓶子喂給2号老鼠…
這樣根據最後老鼠的狀态就可以确定對應位上的數字,比如說1号老鼠死亡,那麼确定毒藥瓶的編号最右位是1,2号老鼠存活,毒藥瓶右起第2位是0… 進而确定毒藥瓶的編号
NO15.
先同步把一根香的兩端都點燃,另外一根香的一端也點燃。等到第一根香燃燒完,再同步把第2根香的另外一端點燃,此時第2根燃完就為15分鐘
NO16.
如果隻有一個藍眼人,那麼他原本看不到藍眼人,聽到醫生的話,就知道了醫生說的藍眼人就是自己,是以他在當天晚上找守衛說自己是藍眼睛。
由此可以推出,如果有兩個藍眼人,那麼他們原本都隻看到一個藍眼人,聽到醫生的話,都會想:對方是不是島上唯一的藍眼人?如果是的話,那麼一天後他應該發現對方已經被釋放。但過了一天沒人被釋放,是以兩人都明白了,對方沒被釋放是因為島上還有一個藍眼人,就是自己。是以,在醫生講話的第二天晚上,這兩人會一起被釋放。
這是個遞歸邏輯。各位想想,如果有三個藍眼睛,那第二天當晚這三個藍眼睛就同時被釋放。
如果是四個藍眼睛,那第三天當晚這四個藍眼睛就同時被釋放。
依次類推,100個藍眼睛,第99天當晚全部被釋放。
NO17.
- 分兩組,A組 44 張,B組 10 張
反轉B組所有牌
假設翻轉後的 10 張中随機分到B組的是 x 張,那麼A組就是10-x 張,B組總共10張,那麼将B組再次翻轉後也是10-x 張,相等
商人加一把鎖,鑰匙自己留着,夥計把箱子送給買主。買主收到箱子,再加一把自己的鎖,鑰匙自己留着。然後,夥計把箱子再送給商人,商人把自己的鎖打開,夥計最後再把箱子送給買主,買主打開自己的鎖就可以得到花瓶了。
這種思想也是多方安全計算裡面雙向随機加密常用到的方法。
NO19.
現在有3個盒子,分别裝有如下物品,以及對應的價值如下:
a 兩枚銀币 價值:20
b 兩枚鎳币 價值:10
c 一枚銀币一枚鎳币 價值: 15
我們隻需要從 c 盒子中拿,如果出現銀币,根據題意,說明它的标簽是2枚銀币,剩下的互換,盒子寫10便士的是a,寫15便士的是b
NO20.
死了3條(第幾天槍響就有幾條)。
從有一條不正常的狗開始,顯然第一天将會聽到一聲槍響。這裡的要點是你隻需站在那條不正常狗的主人的角度考慮。
有兩條的話思路繼續,隻考慮有兩條不正常狗的人,其餘人無需考慮。通過第一天他們了解了對方的資訊。第二天殺死自己的狗。換句話說每個人需要一天的時間證明自己的狗是正常的。有三條的話,同樣隻考慮那三個人,其中每一個人需要兩天的時間證明自己的狗是正常的狗。
NO21.
如果讓盲人成對的去拿,不能保證剛好拿的是兩對黑和兩對白。正确分法是:
把襪子拆開,每人随便拿一隻,注意要每拆一對,兩人就要分一次。這樣就能保證每人拿到4隻黑襪,4隻白襪。
NO22.
要解決這個問題,我們必須弄清楚所謂切換儲物櫃開關狀态是什麼意思。這有助于我們推斷最終哪些櫃子是開着的。
問題:櫃子會在哪幾輪切換狀态(開或關)?
櫃子n會在n的每個因子(包括1和n本身)對應的那一輪切換狀态。也就是說,櫃子15會在第1、3、5和15輪開或關一次。(i=1開,3關,5開,15關。因子個數:偶數關,奇數開)
問題:櫃子什麼時候還是開着的?
如果因子個數(記作x)為奇數,則這個櫃子是開着的。你可以把一對因子比作開和關,若還剩一個因子,則櫃子就是開着的。
問題:x什麼時候為奇數?
若n為完全平方數,則x的值為奇數。理由如下:将n的兩個互補因子配對。例如,如n為36,則因子配對情況為:(1, 36)、(2, 18)、(3, 12)、(4, 9)、(6, 6)。注意,(6, 6)其實隻有一個因子,是以n的因子個數為奇數。
問題:有多少個完全平方數?
一共有10個完全平方數,你可以數一數(1、4、9、16、25、36、49、64、81、100),或者,直接列出1到10的平方:
1 * 1, 2 * 2, 3 * 3, …, 10 * 10
是以,最後共有10個櫃子是開着的
小結