|
Posted on 2005-11-16 18:24 非魚(yú) 閱讀(5926) 評(píng)論(40) 編輯 收藏 所屬分類: 雜七雜八
是ZZ的,題目大約是個(gè)唬頭,我覺(jué)得合格的程序員都應(yīng)該可以算出來(lái)。
小明和小強(qiáng)都是張老師的學(xué)生,張老師的生日是M月N日,2人都知道張老師的生日是下列10組中的一天:
3月4日 3月5日 3月8日
6月4日 6月7日
9月1日 9月5日
12月1日 12月2日 12月8日
張老師把M值告訴了小明,把N值告訴了小強(qiáng),張老師問(wèn)他們知道他的生日是那一天嗎?
小明說(shuō):如果我不知道的話,小強(qiáng)肯定也不知道
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了
小明說(shuō):哦,那我也知道了
請(qǐng)根據(jù)以上對(duì)話推斷出張老師的生日是哪一天。
評(píng)論
該問(wèn)題源于密碼學(xué)中的非對(duì)稱計(jì)算。
很多人都應(yīng)該直到Diffie-Hellman協(xié)議,該協(xié)議用于對(duì)等雙方在不透露機(jī)密信息的情況下,協(xié)商密鑰
參看我以前的一篇隨筆 http://blog.csdn.net/huangzhq/archive/2005/05/23/378703.aspx
密碼學(xué)是非常有趣的一門(mén)科學(xué),我將來(lái)會(huì)在BEA UserGroup上面講解,現(xiàn)在,我簡(jiǎn)要描述上面的是如何計(jì)算出老師的生日。
當(dāng)然,上述的題目從協(xié)議的角度算是脆弱的:)因?yàn)樗凶銐蚵斆鞯娜硕寄苡?jì)算出來(lái)。
好,我們現(xiàn)在進(jìn)入?yún)f(xié)議分析
消息1,小明---〉小強(qiáng):
如果我不知道的話,小強(qiáng)肯定也不知道
消息2,小強(qiáng)---〉小明
本來(lái)我也不知道,但是現(xiàn)在我知道了
消息3,小明---〉小強(qiáng)
小明說(shuō):哦,那我也知道了
小明知道M,小強(qiáng)知道N,
為了交換M,N,且他們不想讓M,N在網(wǎng)絡(luò)上傳送以免旁邊的人都知道
所以,消息1反映了這樣一個(gè)事實(shí),即小明已經(jīng)通過(guò)M得知N不可能是2和7,因?yàn)檫@兩日是沒(méi)有重復(fù)的,
于是,M,N可能組合是
3,4 3,5 3,8
6,4
9,1 9,5
12,1 12,8
消息2反映了這樣一個(gè)事實(shí),即在上面的組合中,小強(qiáng)能計(jì)算出M,因此,生日只能是6,4,其他都是雙解。
上面是一個(gè)Trick,不足以說(shuō)明密碼學(xué)中的美妙,但體現(xiàn)了這樣一種思路,非對(duì)稱信息交換,它可是PKI的基礎(chǔ):)
David, 這個(gè)問(wèn)題應(yīng)該多想想,和DH沒(méi)有關(guān)系,和Key Agreement沒(méi)有關(guān)系,和密碼學(xué)沒(méi)有關(guān)系。
如果M為6或12的話,小強(qiáng)有可能知道,而小明肯定不知道,M月可能為3月或9月。
由小強(qiáng)的話可知,N可能為1日、4日或8日.
小明第二句話可知,M月為9月,那N就為1了。
張老師把M值告訴了小明,把N值告訴了小強(qiáng)
3月4日 3月5日 3月8日
6月4日 6月7日
9月1日 9月5日
12月1日 12月2日 12月8日
小明說(shuō):如果我不知道的話,小強(qiáng)肯定也不知道
小明這么回答說(shuō)明N有重復(fù),因此n可能為4,5,1,8
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了
小強(qiáng)這么回答可推論出
第一點(diǎn):除了老師生日這一天,另外給出的那一天假設(shè)M月D日中的D不可能有重復(fù)的數(shù)字因此D不可能為1,4,5,8,因此9約可排除
第二點(diǎn):N在上面可選的月份中是唯一的,即1,4,5,8出現(xiàn)的機(jī)會(huì)只有一次,若M為3或12,小強(qiáng)根據(jù)它所掌握的信息不可能指導(dǎo)確切的日期,因此M月D日應(yīng)為6月7日
所以老師的生日應(yīng)該為6月4日
小明說(shuō)的最后一句純屬?gòu)U話。
6月4日 肯定不對(duì)!!!你們?cè)傧胂氚?#64;
9.1
6.4不對(duì) .只要想如果明拿了6 ,他不知道強(qiáng)是否拿的是7還是4,如果是7,強(qiáng)就可以一次確定! 所以明不能說(shuō)我不知,強(qiáng)就不知!
所以要排除月份里有2,7的,即月只能是3,9!
當(dāng)強(qiáng)知道月份只能是3,9 ,日期是1,4,8都可以唯一確定
但是明又說(shuō)他也知道了,證明是1,因?yàn)橹挥兴『檬?是,9.1可以確定,如果是3月,他是不可能確定的
小明說(shuō):如果我不知道的話,小強(qiáng)肯定也不知道
月份中的所有日期在其他月份均出現(xiàn)>排除6,12月
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了
3,9月中唯一的日期>排除5日
小明說(shuō):哦,那我也知道了
所余日期中唯一的月份>9月1日
我自己的見(jiàn)解吧,比較通俗的:
其實(shí)小明的第一句話的前半句"如果我不知道的話"是廢話,但又不是完全沒(méi)用,主要是用來(lái)迷惑吾等旁觀者的,害我頭暈了那么久,BS他!!.回過(guò)頭來(lái),在已知條件中的4個(gè)月份都有兩個(gè)以上的日數(shù),所以只知道月數(shù)的小明是肯定不知道的,所以他的第一句話其實(shí)是"小強(qiáng)肯定不知道",因?yàn)樗沁@樣想的,他看到條件中有兩個(gè)比較特別的日子: 6月7日 和12月2日,日數(shù)是唯一的.如果N是7或2的話,小強(qiáng)的肯定知道了.所以只要小強(qiáng)先開(kāi)口說(shuō)知道了,那肯定是這兩個(gè)其中一個(gè),知道月份的小明自然也會(huì)知道是兩者中的哪一個(gè).但小明不等小強(qiáng)先開(kāi)口卻先一口咬定"小強(qiáng)肯定不知道".為什么他會(huì)這么肯定?我們分析一下,小強(qiáng)也不知道的情況只能是除6月7日 和12月2日外的日期了,因?yàn)槎加兄貜?fù)的日數(shù).小明怎么就這么確定不是這兩個(gè)日期呢?顯而易見(jiàn),他知道的月數(shù)不是6和12.所以,小明無(wú)意中透露了第一句話的潛臺(tái)詞就是"M不是6或12",也就是M=3或M=9.
現(xiàn)在的條件就過(guò)濾為:
3月4日 3月5日 3月8日
9月1日 9月5日
5個(gè)日期了
小強(qiáng)聽(tīng)了小明的話后,一開(kāi)始有點(diǎn)驚訝小明怎么就這么確定我也不知道呢,仔細(xì)想想,很快用同樣的思路悟出小明的話中含義.根據(jù)現(xiàn)在已知條件,小強(qiáng)也得出了結(jié)論:"現(xiàn)在我知道了 ",但他為了要挫一下小明的銳氣,就在前面先來(lái)慢慢嘆半句"本來(lái)我也不知道".我們?cè)賮?lái)分析,他現(xiàn)在能知道的情況下只有日數(shù)沒(méi)有重復(fù)的日期符合條件,所以X月5日可以排除了,我們剩下可選擇的日期就只有:
3月4日 3月8日
9月1日
3個(gè)日期了
小明聽(tīng)到小強(qiáng)確認(rèn)"本來(lái)我也不知道"后心里微微一笑"大家都半斤八兩吧",但后半句就嚇了他一跳."我靠,不是吧,剛說(shuō)你不知道,馬上就說(shuō)知道了?搞什么東西嘛!".小明也不笨,他也馬上分析到小強(qiáng)知道的原因和得出上面的條件來(lái).只有兩個(gè)不同的月份,知道月數(shù)的他當(dāng)然也能很快的確定是哪日期了,不甘心落后的他馬上說(shuō)"哦,那我也知道了".我們最后分析,雖然剩下的三個(gè)日期中只有兩個(gè)不同的月數(shù),但3月的日數(shù)有兩個(gè),而不知道日數(shù)的小明也能確定下來(lái)的,那就只有9月1日這個(gè)只有一個(gè)日數(shù)的了,所以,老師的生日就是9月1日!
密碼學(xué),我覺(jué)得有點(diǎn)道理。
但是,如果小明和小強(qiáng)互相知道對(duì)方掌握著一個(gè)數(shù)字的話,而且這個(gè)數(shù)字無(wú)法直接得知老師的生日是幾月幾日(題目中顯然是這種假設(shè))。那么小強(qiáng)得到的這個(gè)N顯然不是7和2(7和2是唯一的數(shù)字),推理可知小明得到數(shù)字肯定不是6(因?yàn)樾∶魇孪戎繬不是7。如果小明自己得到的M是6的話,直接可以肯定是6月4日了。因?yàn)檫@樣的話,拿到M的小明就等于是小強(qiáng)直接拿到7或2一樣,直接得到答案了。)
3月4日 3月5日 3月8日
6月4日 6月7日
9月1日 9月5日
12月1日 12月2日 12月8日
小明說(shuō):如果我不知道的話,小強(qiáng)肯定也不知道
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了
小明說(shuō):哦,那我也知道了
請(qǐng)根據(jù)以上對(duì)話推斷出張老師的生日是哪一天。
如果小強(qiáng)得到的N不是4的話,得到M為3的小明才有可能永遠(yuǎn)猜不出老師的生日N到底是哪一天(M如果不是3,小明就沒(méi)有道理講出第一句話來(lái)。小明猜對(duì)方手里是4,心想不是4的話,我就不知道是幾了,小強(qiáng)也猜不出我的月。于是有了第一句話,如果我不知道的話{不是4,我就不知道了,小強(qiáng)的5和8也同樣肯定不知道是幾月},小強(qiáng)肯定不知道{是4,小強(qiáng)有可能知道月是3,因?yàn)榭梢耘懦夷玫?,但是不是4,就肯定不知道了})。只有這樣,小明才可能講出第一句話來(lái)!!
語(yǔ)言來(lái)表達(dá)上述的觀點(diǎn)是很困難的,用思維來(lái)參悟并不難。
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了 是因?yàn)樾?qiáng)收了小明的啟發(fā),想到了這一點(diǎn)(這一點(diǎn)指的是小明拿到的M肯定不是6,是6就等于自己拿到了7和2一樣。)所以拿到了N為4的小強(qiáng)一下子就從 3月4日 3月5日 3月8日
6月4日 6月7日
里得到到了3月4日這個(gè)答案。
所以才有了最后小明的這句話:哦,那我也知道了 小明聽(tīng)了小強(qiáng)的話,堅(jiān)定了自己的想法,就是小強(qiáng)的確拿到的N是4(如果不是4,小明和小強(qiáng)都不透露自己的數(shù)字,雙方永遠(yuǎn)都無(wú)法確定老師的生日,因?yàn)镹不是7或2是明顯的。M不是6是暗藏的,要推理的,這里小強(qiáng)是通過(guò)小明語(yǔ)言的暗示才推理到M不是6)。所以就從3月份中確定了是3月4日。
典型的博弈過(guò)程
1、首先排除6月的7和12月的2,因?yàn)檫@兩天是唯一的,只需要知道日就可以確定生日。
2、博弈過(guò)程:小明是知道月的,但是他想借助小強(qiáng)來(lái)排除不確定的日,所以他試探性的問(wèn)"如果我不知道,小強(qiáng)肯定不知道",小明前提回答N有重復(fù),因此n可能為4、1、5、8,他想借助小強(qiáng)排除重復(fù)的日。M則不定
3、結(jié)果小明回應(yīng)他"本來(lái)不知道,現(xiàn)在卻知道了”,小明如果知道月,小強(qiáng)知道的日,小強(qiáng)借助小明的詢問(wèn)確定了小名想借助小強(qiáng)的回答確定是6月4日或者7日,結(jié)果小強(qiáng)的回答幫助小明排除了6月7日,只有這樣,小明才能確定日是4,小明在前提設(shè)立了一個(gè)假設(shè)條件,即:“如果我不知道,小強(qiáng)肯定不知道”,說(shuō)明了小明的意思就是想讓小強(qiáng)排除6月7日,小強(qiáng)則揣摩了小明的意思,說(shuō)出本來(lái)我不知道,現(xiàn)在卻知道了,即6月4日。其他都是雙解
我不知道什么密碼學(xué)也不知道什么是對(duì)稱學(xué),我只知道結(jié)果是6月4日。因?yàn)閺男∶鞯哪窃捒梢缘贸鼋Y(jié)論,只有6月4日是剩余答案,其他都有2個(gè)結(jié)果。SO簡(jiǎn)單的問(wèn)題嘛
霖雨的分析是對(duì)的,而且很詳細(xì):)
的確,霖雨分析的很嚴(yán)密。而且也是正確的。高手啊!!佩服!!
排除法:
小明說(shuō):如果我不知道的話,小強(qiáng)肯定也不知道--說(shuō)明已經(jīng)不是6月和12月
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了 --已經(jīng)不是5了,如果是5的 話他自己也不知道是3月還是9月
小明說(shuō):哦,那我也知道了--說(shuō)明已經(jīng)是9月了,如果是3月的話,就不知道 3月4日還是3月8日.
所以推出的答案是9月1日.
排除法:
小明說(shuō):如果我不知道的話,小強(qiáng)肯定也不知道--如果小強(qiáng)是2和7的話,小強(qiáng)肯定知道了,說(shuō)明已經(jīng)不是6月和12月了.
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了 --已經(jīng)不是5了,如果是5的話他自己也不知道是3月5日還是9月5日.
小明說(shuō):哦,那我也知道了--說(shuō)明已經(jīng)是9月了,如果是3月的話,就不知道3月4日還是3月8日.
所以推出的答案是9月1日.
同傳租賃 同聲傳譯翻譯公司 同聲傳譯設(shè)備租賃 同聲傳譯 同傳租賃 同聲傳譯 同聲傳譯設(shè)備租賃 同傳租賃 北京同傳設(shè)備租賃 上海同聲傳譯設(shè)備租賃 同聲傳譯 同聲翻譯公司
我想是:6月4號(hào)
這樣看
月份 日期
3 4 5 8
6 4 7
9 1 5
12 1 2 8
我們現(xiàn)在就說(shuō)小明知道的是:6月
首先,從上面的日期得知6月7和12月2日,的日期那個(gè)數(shù)是唯一的,這兩個(gè)日期包含了6月
第一個(gè)
小明說(shuō):如果我不知道的話,小強(qiáng)肯定也不知道 .
他要問(wèn)小強(qiáng)是不是這兩個(gè)(6月7和12月2日),就是要告訴他,他有6或12
小強(qiáng)說(shuō):本來(lái)我也不知道,但是現(xiàn)在我知道了
"本來(lái)我也不知道",回答了他不是上面那兩個(gè),(6月7和12月2日)
"但是現(xiàn)在我知道了"回答他本來(lái)是在兩個(gè)數(shù)字中猶豫(因?yàn)?字日期的有,3月4號(hào)和6月4號(hào)),
他說(shuō)他現(xiàn)在知道了那就是說(shuō)是6月4號(hào)了,
所以小明說(shuō):哦,那我也知道了
如果我猜肯定猜9.1
非常有建設(shè)性的答案...為什么?不知道...應(yīng)試教育...
re:看了上面的分析,感覺(jué)是9.1把
分歧點(diǎn)是第一句話:小m肯定小q不知道..
1.不是2,7號(hào)
2.不是6,12月份
你覺(jué)得呢?
其實(shí)是語(yǔ)文的問(wèn)題...咬文嚼字..咬文嚼字..
不想多說(shuō),根本都不嚴(yán)謹(jǐn)。
==小明是怎么知道不是3月的那兩天哪?
都是高智力者,什么答案都用書(shū)本上的知識(shí)來(lái)推理,那這就很容易多了。
可結(jié)果就那么容易嗎?
我的答案是:6月7日
3月4日 3月5日 3月8日
6月4日 6月7日
9月1日 9月5日
12月1日 12月2日 12月8日
M=月 N=日
M=3,6,9,12
N≠1,2,4,5,7,8,10,11
所以以上得出
9月1日 是沒(méi)有數(shù)字重疊和沖突的~
不會(huì)是6月7日或12月2日,因?yàn)?日和2日是十組中的唯一。從而小明的第一句話否定了兩個(gè)組,6月組和12月組,而只可能是3月或9月,小強(qiáng)在否定了兩個(gè)月組就能直接得到答案,是因?yàn)樗玫降氖且粋€(gè)1、4或8,但只有1能滿足小明能因此得到答案。9月1日,正解!
不同人看問(wèn)題,角度不一樣,思維不盡相同。 有密碼學(xué),博弈論,推理學(xué),情理思考,換位思考,案件重演等等。
兩個(gè)最具爭(zhēng)議答案,9月1與6月4
如果兩人有人玩陰的,那就是6月4
如果兩人都比較直白,那就是9月1
而如果是中國(guó)應(yīng)試教育,答案當(dāng)選9月1 而如果是在美國(guó)出的思考題,答案不唯一,其中6月4跟9月1都是正確的答案。
那么為什么要給出最后一句話呢?
這道題如果沒(méi)有最后一句話的話,那么將有兩個(gè)答案,6.4和3.4.
但是,有了最后一句話的話,那么小明透露出的信息就是他之前不知道
有了這句不出,答案就只有3月4日了
你的說(shuō)法不對(duì)
你說(shuō)最后剩下3/4 3/8 9/1 應(yīng)為3月有兩組 所以是9/1,,
可是3/4很早就被排除了
一開(kāi)始就知道6/7 不可能 而小明不知道答案 所以不可能是6月 那么4號(hào)也就不可能 接著3/4 也被排除
最后剩下的是9/1 和3/8 這兩個(gè)選一個(gè) 我還不確定
應(yīng)該是6月7號(hào),這樣,小強(qiáng)分析如果是三月份的話,三月份的日期4號(hào)5號(hào)8號(hào),在每個(gè)月份上都有,所以小明根本不可能肯定,那么,三月份跟4號(hào)5號(hào)8號(hào)可以排除
# re: 月薪3萬(wàn)的一道面試題------看看你的IQ [未登錄](méi) 回復(fù) 更多評(píng)論
2012-09-27 17:04 by
9月1號(hào)
|