• 一道笔试题


    已知两个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

  • 相关阅读:
    Java学习笔记之---单例模型
    Java学习笔记之---内部类
    Java项目案例之--封装的实例
    Java学习笔记之---构造方法
    Java学习笔记之---static
    Java学习笔记之---面向对象
    咨询顾问与逻辑思客
    最重要与靠不住之间如何平衡
    《网络借贷信息中介机构业务活动管理暂行办法》
    商业银行法律法规与监管要求汇总
  • 原文地址:https://www.cnblogs.com/emituofo/p/2572231.html
Copyright © 2020-2023  润新知