天天看點

猜數字邏輯題!【轉載】

題目:1-20的兩個數把和告訴A,積告訴B,

A說不知道是多少,

B也說不知道,

這時A說我知道了,

B接着說我也知道了,

問這兩個數是多少?

分析:

這是一道邏輯性非常強,由于這兩個數的範圍是1-20是以

他們的和記着S:S範圍為2<=S<=40,積記着M

A知道S,B知道M

1.       A說不知道,表明這個S可以拆成幾組兩個數的和,像4=1+3,2+2,這裡可以排除掉S=2,3,39,40這4中情況。

2.       B所知道資訊是A說“不知道”和自己知道的這個積M,但B卻說,不知道,可以知道,這數M肯定不是質數,他肯定一個合數。像, 1,2,3,5,7,11,…肯定不在裡面。且這類數也不在M裡面,兩個質數相乘的M大于20,像21,如果M=21,等那麼B立刻就知道這兩個數是3*7,還有像,360(18*20),340(17*20),這裡都是在他們兩個非常聰明的情況下。

我們把M肯定不在這裡面數的集合為P={1,2,3,5,7,11,13,17,19,23,29,31,37,....., 340,360,380...}

3.       關鍵就在于這一步,A聽到B說不知道,立刻可以推斷出來,然後說自己知道,這表明A根據B的話進一步縮小的範圍。在這種情況下:我們可以得出這樣結論:

假設S可以分成以下幾組和:x1+y1, x2+y2,..,

在A看來,A自己知道S,是以A推出B的那個M可能數是:x1*y1,x2*y2

但由于B說不知道時,A能知道,這裡就要想想,A憑什麼根據知道?也就是x1*y1,x2*y2,…這些數中隻有一個數不在P集合中,其他的都在集合P中,就是B如果知道了這個數,就可以得出結果出來的。隻有一個數不是這類數。到此為止,A根據B說“不知道”,A是這樣推斷,M不等于其他的n-1數(這些數在P集合中)如果M為那(n-1)個數裡面的一個話,那麼B肯定不會說不知道。

那麼現在就要找什麼樣的S滿足:S拆成多組數之和:如:

X1+y1 = S

X2+y2 = S

Xn+yn = S

且滿足在這n組中隻有1組數的積(xi*yi)Mi在集合不在P中。

現在就可以一一分析了:

S=4:   2+2=4, 1+3=4, 2*2=4, 1*3=3, 3在P中,4不在P中,隻有一個不在P, 符合條件

s=5   1+4 = 5, 2+3=5; 1*4=4, 2*3=6 ,都不在P中 不符合

s=6 1+5=6,2+4, 3+3,; 1*5 = 5, 2*4=8,3*3=9,有兩個數不在P中,不符合

s=7 1+6,3+4,2+5; 6,12,10,3個數都不在P中

。。。。

當S=37,現在又不同了,20+17,18+19,(340,18*19,)這兩個數都在P中,因為,若M=340,B立刻可以知道這兩個數為20,和17,

其實要一一排除的,也就是說S=4到38.

最後我認為S=4符合,别的還沒有全部驗證,其實可以程式設計實作來驗證的。

這兩個數分别為2,2

4   現在我們反過來推算驗證:

a) A知道S=4,存在1+3,2+2兩種情況,是以A不知道,但A可以推算M可能為3,4,根據這兩個數,A是不能肯定B是否知道答案的。

b) B知道M=4,存在1*4, 2*2 ,B能推斷S可能為5,4,因為S為其中任意一個,A是肯定推算不出來的,也就是說,若B知道M=4,就算是A自己不說“不知道”,B也可以肯定A是不知道的。是以A說的那句話對B用處不大。

c) 因為A推算出B可能為3,和4,但B卻說“不知道”,A這時就知道,M肯定不是3,如果是的話,B就會知道結果的,是以A知道M=4,又根據S=4是以A知道這兩個數為2,2.

d) B這時為什麼也知道呢?因為B推算出S可能為5,4,如果S=5的話,B會站在A的立場上去思考,也就是說假如A知道S=5時會怎麼想,他會這麼想的:1+4=5,2+3=5, 即可以推算出M=4,6,此時,A肯定能夠得出B不知道答案,也就說B說的那句話“不知道”沒有價值,A也就推算不出這兩個數。是以S!=5,那麼S=4了,是以B此時也知道了。

來自:  http://hi.baidu.com/scuxy06/blog/item/2f3540941eec2214d21b7020.html