一道笔试题

已知两个1~30之间的数字,甲知道两数之,乙知道两数之

甲问乙:"你知道是哪两个数吗?"乙说:"不知道"

乙问甲:"你知道是哪两个数吗?"甲说:"也不知道"

于是,乙说:"那我知道了"

随后甲也说:"那我也知道了"

请问这两个数是什么?

 

解:

设这两个数为x,y. 甲知道两数之和 A=x+y; 乙知道两数之积 B=x*y;

 

该题分两种情况

l  允许重复, 有(1 <= x <= y <= 30);

l  不允许重复,有(1 <= x < y <= 30);

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

当不允许重复, 即(1 <= x < y <= 30);

A∈[3,59]; B∈[2,870];

 

1)首先甲问乙,乙Say NO

=> B=x*y 解不唯一

=> B=x*y 为合数(除了1和它本身两个约数外,还有其它约数的数,叫合数)  

 

又∵ x ≠ y

∴ B ≠ k*k (其中k∈N) ,B为非平方数

 

于是得到结论(推论1):

B=x*y 是合数且 B 非平方数

即:B ∈{6,8,10,12,14,15,18,20...}  

 

注意,这个推论,我这个局外人和甲都能推导出来。就是说此时,我和甲都知道两数之积的大概范围。

 

2)然后乙问甲,甲Say NO

=> A=x+y 解不唯一

=> A ∈[5,57];

 

上面已经提到,甲已经知道推论1。而且甲也知道两数之和,但是他依旧Say NO,这是怎么回事?我们来揣测一下。由于我们不知道两数之和是多少,所以先从假设开始。

 

假设 A=x+y=5

则有双解

x1=1,y1=4;

x2=2,y2=3;

代入公式B=x*y:

B1=x1*y1=1*4=4; (不满足推论1,舍去)

B2=x2*y2=2*3=6;

得到唯一解x=2,y=3 即甲知道答案,这与甲Say NO相矛盾

故假设不成立, A=x+y≠5

 

假设 A=x+y=6

则有双解

x1=1,y1=5;

x2=2,y2=4;

代入公式B=x*y:

B1=x1*y1=1*5=5; (不满足推论1,舍去)

B2=x2*y2=2*4=8;

得到唯一解x=2,y=4即甲知道答案,这与甲Say NO相矛盾

故假设不成立, A=x+y≠6

 

当A∈[7,57]时

至少存在两组解满足推论1,即

A为奇数时,

x1=(A-1)/2,y1=(A+1)/2;

x2=(A-3)/2,y2=(A+3)/2;

代入公式B=x*y:

B1=x1*y1=(A-1)/2 * (A+1)/2 (满足推论1)

B2=x2*y2=(A-3)/2 * (A+3)/2 (满足推论1)

A为偶数时,

x1=(A-2)/2,y1=(A+2)/2;

x2=(A-4)/2,y2=(A+4)/2;

代入公式B=x*y:

B1=x1*y1=(A-2)/2 * (A+2)/2 (满足推论1)

B2=x2*y2=(A-4)/2 * (A+4)/2 (满足推论1)

存在多解的情况,让甲无法判断,所以Say NO。

 

于是得到结论(推论2):

A∈[7,57]

 

注意,这个推论,我这个局外人和乙都能推导出来。

 

3)然后乙Say YES

=> 乙根据已经知道的两数之积B=x*y及推论2可以得出唯一解,即

A=x+y,  A∈[7,57]

B=x*y,  B∈{6,8,10,12,14,15,16,18,20...}

1 <= x < y <= 30

x,y存在唯一解

 

乙是怎么办到的?我们来揣测一下。由于我们不知道两数之积是多少,所以先从假设开始。

 

假设B=6 时:有两组解

x1=1, y1=6

x2=2, y2=3 (不满足推论2,舍去)

得到唯一解 x=1, y=6,可以Say YES

 

假设B=8 时:有两组解

x1=1, y1=8

x2=2, y2=4 (不满足推论2,舍去)

得到唯一解 x=1, y=8,可以Say YES

 

当 B>8 时:容易证明均为多重解

 

于是得到结论(推论3):

x=1, y=6 或者 x=1, y=8

 

注意,这个推论,我这个局外人和甲都能推导出来。

 

这里有个疑问,推论3不是两个答案吗,乙怎么能Say YES呢?设身处地为乙想想吧,乙是知道两数之积B是多少的。说的再明白些,如果乙知道的两数之积是6,那么他当然可以判定x=1,y=6了。同理,如果乙知道的两数之积是8,那么他当然可以判定x=1,y=8了。此时,我和甲不知道两数之积,所以只能得到推论3.

 

4)最后甲Say YES  

=> 甲根据已经知道的两数之和A=x+y及推论3可以得出唯一解

 

说的再明白些,如果乙知道的两数之和是7,那么他可以判定x=1,y=6了。如果甲知道的两数之和是9,那么他可以判定x=1,y=8了。

 

综上所述,原题所求有两组解:

x1=1, y1=6

x2=1, y2=8

不信的话,你可以从头开始验证两组解,你会发现甲和乙的回答,是那么“顺其自然”。

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

当x<=y时,有(1 <= x <= y <= 30);

同理可得唯一解 x=1, y=4

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

允许两数重复的情况下

答案为x=1, y=4; 甲知道和A=x+y=5, 乙知道积B=x*y=4

不允许两数重复的情况下有两种答案

答案1: 为x=1, y=6; 甲知道和A=x+y=7, 乙知道积B=x*y=6

答案2: 为x=1, y=8; 甲知道和A=x+y=9, 乙知道积B=x*y=8

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

换汤不换药

把上面的题目改下,改成乙先问甲,甲Say NO,然后甲问乙,乙Say NO,然后甲Say YES,最后乙Say YES。请问这两个数是什么?

解题思路类似,答案是:

允许两数重复的情况下

答案为x=2, y=2; 甲知道和A=x+y=2, 乙知道积B=x*y=4

不允许两数重复的情况下有两种答案

答案1: 为x=2, y=3; 甲知道和A=x+y=5, 乙知道积B=x*y=6

答案2: 为x=2, y=4; 甲知道和A=x+y=6, 乙知道积B=x*y=8

原文地址:https://www.cnblogs.com/emituofo/p/2572231.html