很久以前在天涯看到的一道智力題(原文鏈接: 來道真正高智商的算術題哈):

 一個小組裡面有A,B,C三個人,現在要求這三個人每個人都算出本小組三人的年齡總和.但是他們三個彼此之間又要求年齡絕對保密,也就是他們互相都絕不能知道其他人的年齡.  哪該用什麼辦法使他們可以都算出年齡總和也?重要補充:1. 禁止有第四個人參與,他們三個人必須要想出一個辦法自行解決。

2. 原帖子里有人回答:

「把每個人的年齡按1,2,4,8,16,32的方式拆開,每個數字寫在一張卡片上,三個人湊在一起,像豁麻將一樣,然後再把卡片上的數字加在一起就行了。  當然拆分數字的方式有很多,不止我這一種。」但是,出題人說:打麻將的思路比較有意思.如果三個人是在一起的話,這種辦法確實可行.  但如果三個人不在一個地方,只能通過通信手段來聯繫.那就不能進行最關鍵的 豁牌 這一步了.3. 原帖子里出現更好的答案回答:「我來試試:  假設A24歲,B30,C22歲.

  下面開始:由A任意說個數字(如:40)給B,並叫B加上自己的生日和A的數字說給C(40+30=70),C再把兩項之和(70)加上自己的歲數(22)說給A(92),A本就知道這個90有他在自己年齡基礎上多加的40-24=16,故,A就知道了他們三人共92-16=76歲!!!

  總結:  1、A,B,C可以以此類推,B,C都可以先說任意數字,最後傳到B或者C那裡得到答案。  2、三人都互相不知道對方的歲數。  3、次推理運用了假設推理也相當於設未知數的方法。  4、此方法可以不要求三人在一堆,電話告訴即可。」但是,出題人說:不過,如果要從追求最完美的角度來說,你的方法還是有個小小的缺憾,那就是不能防止勾結.也就是說如果有兩個人是狼狽為奸的一夥,剩下那個倒霉蛋的年齡自然就不會是秘密了.嘿嘿嘿..不知道此題有沒有更好的答案,或者標準答案。


A把自己的年齡加或減一個數字,報給B,B加上真實年齡後給C,C加上真實年齡後給A,A再把總數減或者加回去

謝不邀。

第一次答題,沒想到還是數學題。

作者說的第二種解法看上去沒什麼漏洞,但個人總覺得哪裡怪怪的,先碼一個吧。

還有,如果兩人勾結,無論以何種演算法,最後一個人的年齡都不會是秘密。

關於這個問題,個人有個不同的解法。ABC三人都把自己的年齡拆分成任意兩個數,使得兩個數之和為自己的年齡,然後將兩個數字分別告訴B和C。比如A33歲,可以拆分成15和18(當然1和32,2和31這樣也行),然後把15告訴B,把18告訴C。B和C也是如此做。接下來三人將自己的年齡和從另外兩個人處得到的兩個數字相加,再把結果公布,三人的結果之和除以二即為三人的年齡之和。原理如下:假設ABC三人的年齡分別是a、b、c,三人將年齡拆分後分別得到三組數字u和v,w和x,y和z,

其中a=u+v,b=w+x,c=y+z.

三人將年齡和得到的兩個數字相加:A:a+w+yB:b+u+zC:c+v+x三組結果匯總: (a+w+y)+(b+u+z)+(c+v+x)= a+b+c+(u+v)+(w+x)+(y+z)=2*(a+b+c)即,結果的匯總為三人年齡之和的二倍,除以二就是三人年齡之和。以上。
①讓三人各自報出真實年齡或比真實年齡小1的數字,把3個數字相加。那麼每人報出的數字要麼是真,要麼是假,且不能私下交流否則就暴露自己。②每個人分次報出30個不少於6位數不多於12位數的數字(a報n個b報n個c報n個,直至每個人報完30個,n取1~30),三人把這90個數字計算總和。

③每人再重新報出剛才修改後的30個數字(如果自己報的年齡為真不修改,如果為假則對任何數位上的數字加1,比如3355685改為3355785),且每人把自己的30個數字打亂剛才順序(a報m個b報m個c報m個,m取1~30),最後求和。

④最後根據②③結果,推測真實年齡總和。
這道題很明顯,說不能知道別人的年齡,但是算出年齡總和的話就必須得知道。那麼此題題意就是通過間接的方式獲得他人年齡。我可以問其中一個人你媽多少歲呀?你比你媽小多少歲呀即可。其他兩個人同樣這樣做,就能算出來啦。
這個不難呀!三個人只需要報出自己年齡的個位數就可以了。基本上看到對方基本上能猜出來對方大概多大了。如果有些人看上去的確和實際年齡差太多。那可以讓三個人多學學人年齡與身體節後的知識。不可能明明六十歲,看上去只有四十歲並且沒有證據通過細節發現真實大概年齡的!或者說出自己的屬相!
推薦閱讀:
相关文章