分享一下今天看到的幾道邏輯題html
一羣人開舞會,每人頭上都戴着一頂帽子。帽子只有黑白兩種,黑的至少有一頂。每一個人都能看到其它人帽子的顏色,卻看不到本身的。主持人先讓你們看看別人頭上戴的是什幺帽子,而後關燈,若是有人認爲本身戴的是黑帽子,就打本身一個耳光。第一次關燈,沒有聲音。因而再開燈,你們再看一遍,關燈時仍然鴉雀無聲。一直到第三次關燈,纔有劈劈啪啪打耳光的聲音響起。問有多少人戴着黑帽子?spa
答:有三我的戴黑帽。假設有N我的戴黑,當N=1時,戴黑人看見別人都爲白則能確定本身爲黑。因而第一次關燈就應該有聲。能夠判定N> 1。對於每一個戴黑的人來講,他能看見N-1頂黑帽 ,並由此假定本身爲 白。但等待N-1次尚未人打本身之後,每一個戴黑人都能知道本身也是黑的了。因此第N次關燈就有N我的打本身。code
對一批編號爲1~100,所有開關朝上(開)的燈進行如下*做:凡是1的倍數反方向撥一次開關;2的倍數反方向又撥一次開關;3的倍數反方向又撥一次開關……問:最後爲關熄狀態的燈的編號。htm
答:若實際操做求解會至關繁瑣。咱們知道,就某個亮着的燈而言,若是撥其開關的次數是奇數次,那麼,結果它必定是關着的。根據題意可知,號碼爲N的燈,撥開關的次數等於N的約數的個數,約數個數是奇數,則N必定是平方數。由於10的平方等於100,可知100之內共有10個平方數,即,最後關熄狀態的燈共有10盞,編號爲一、四、九、1六、2五、3六、4九、6四、8一、100。
能夠寫一段代碼跑一下:blog
var arr = []; for(var i=0;i<100;i++){ arr.push(true); } for(var j=0;j<100;j++){ for(var i=0;i<100;i++){ if((i+1)%(j+1) == 0){ arr[i] = !arr[i]; } } } for(var i=0;i<100;i++){ if(arr[i] == false){ console.log(i+1); } }
運行結果也同樣:圖片
你讓某些人爲你工做了七天, 你要用一根金條做爲報酬.這根金條要被分紅七塊.你必須在天天的活幹完後交給他們一塊.若是你只能將這根金條切割兩次,你怎樣給這些工人分?get
答:分紅一、二、4;
第一天:給出去面值1的一塊;
次日:給出去面值2的一塊,找回面值1的一塊;
第三天:給出去面值1的一塊;
第四天:給出去面值4的一塊,找回面值2和麪值1各一塊;
第五天:給出去面值1一塊;
第六天:給出去面值2的一塊,找回面值1的一塊;
第七天:給出去面值1的一塊。it
相似的題目還有:console
引用文字class
在房裏有三盞燈,房外有三個開關,在房外看不見房內的狀況,你只能進門一次,你用什 麼方法來區分那個開關控制那一盞燈
答: 若是「在房外看不見」可理解爲:「看不見哪一個燈亮,而看得見房裏亮不亮」的話:先看一個開關A,進門,肯定一盞,而後斜下不亮的一盞,出門,關掉A,開B,看房裏是否還亮。
八個球,從外觀看是同樣的,有一個球的質量重(或輕),其他七個球質量同樣,稱兩次找出重的(或輕的)那個球。
上一題的變種題,更難一些:
有12個小球,從外觀看是同樣的,在這12個小球裏有一個是壞球,和其它11個好球重量不一樣,但不知道是重仍是輕,用一臺天平只稱三次,如何找出這個壞球,且要肯定這個壞球是重了仍是輕了。