腾讯智力笔试题(精)

来源:互联网 发布:任务分配算法 编辑:程序博客网 时间:2024/05/22 14:17

题目:1-20的两个数把和告诉A,积告诉B

A说不知道是多少,

B也说不知道,

这时A说我知道了,

B接着说我也知道了,

问这两个数是多少?

 

分析:

这是一道逻辑性非常强,由于这两个数的范围是1-20所以

他们的和记着SS范围为2<=S<=40,积记着M

A知道S,B知道M

1.      A说不知道,表明这个S可以拆成几组两个数的和,像4=1+32+2,这里可以排除掉S=2339404中情况。

2.      B所知道信息是A说“不知道”和自己知道的这个积M,但B却说,不知道,可以知道,这数M肯定不是质数,他肯定一个合数。像,1235711肯定不在里面。且这类数也不在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*yiMi在集合不在P中。

现在就可以一一分析了:

S=4:  2+2=4, 1+3=4,  2*2=4, 1*3=3, 3P中,4不在P中,只有一个不在P符合条件

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

s=6 1+5=62+4 3+3,; 1*5 = 5 2*4=83*3=9,有两个数不在P中,不符合

s=7 1+63+42+5 612103个数都不在P

。。。。

 

S=37,现在又不同了,20+1718+19,(34018*19,)这两个数都在P中,因为,若M=340B立刻可以知道这两个数为20,和17

其实要一一排除的,也就是说S=438.

最后我认为S=4符合,别的还没有全部验证,其实可以编程实现来验证的。

这两个数分别为22

 

4  现在我们反过来推算验证:

a) A知道S=4,存在1+32+2两种情况,所以A不知道,但A可以推算M可能为34,根据这两个数,A是不能肯定B是否知道答案的。

b) B知道M=4,存在1*4 2*2 B能推断S可能为54,因为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知道这两个数为22.

d) B这时为什么也知道呢?因为B推算出S可能为54,如果S=5的话,B会站在A的立场上去思考,也就是说假如A知道S=5时会怎么想,他会这么想的:1+4=52+3=5即可以推算出M=46,此时,A肯定能够得出B不知道答案,也就说B说的那句话“不知道”没有价值,A也就推算不出这两个数。所以S!=5,那么S=4了,所以B此时也知道了。

 

ps:这道题我是一步一步推算过来的,现在只是把它记录下来,还没有验证到底正不正确,希望大家来讨论

原创粉丝点击