甲乙(数理逻辑)转自http://www.cnblogs.com/devymex/p/3329635.html
这是一道历史悠久,又很困难的面试题。
你在旁观主持人和甲、乙两个天才数学家玩猜数字游戏。主持人准备了两个数,告知甲乙:这两个数不同,且大于等于1,小于等于30。然后主持人将两数之积告诉甲,把两数之和告诉乙。甲知道乙拿到两数之和,乙也知道甲拿到两数之积。主持人让甲乙猜这两个数字,让甲先发言。
甲:“我不知道这两个数是什么”
乙:“我也不知道”
甲:“那我知道了”
乙:“那我也知道了”
请问你,这两个数是什么?
网上有不少对这道题的讨论和答案,但几乎都没有准确的推理过程。本文用尽量简单明了的语言给出详细的推理过程,但建议在参阅下面的答案前,先自行认真思考。
分析与解答
由于推断的逻辑很复杂,所以必须用约定的语言来描述。本文所用的推断名称格式如下:
“1甲n”表示若甲拿到的两数之积为n,第1次发言时做的推断。
“1乙m”表示若乙拿到的两数之和为m,根据甲的第1次发言,乙做出的推断。
“2甲n”表示若甲拿到的两数之积为n,根据乙的第1次发言,甲做出的推断。
“2乙m”表示若乙拿到的两数之和为m,根据甲的第2次发言,乙做出的推断。
前提是甲乙都是天才数学家,因此一定会先假设两个数,然后将自己做为对方进行推断。如果可以推断出,则一定不会失误。
推断的书写格式为:
推断名:可能拆分1,结论1;可能拆分2,结论2;……
推断名为红色表示可知推断,即可推断出确切的两个数;绿色表示未知推断,即有多种可能。
一、甲说:“我不知道”
下面列出甲拿到的积为2到12的全部情况。(A)若两数之积只有一种拆分的情况下甲会做出已知推断,与甲这次未知的事实不符;(B)若至少有两种可能,则甲做出未知推断,符合甲这次未知的事实。
1甲2:1*2,可知1和2。(A)
1甲3:1*3,可知1和3。(A)
1甲4:1*4,可知1和4。(A)
1甲5:1*5,可知1和5。(A)
1甲6:1*6,2*3。(B)
1甲7:1*7,可知1和7。(A)
1甲8:1*8,2*4。(B)
1甲9:1*9,可知1和9。(A)
1甲10:1*10,2*5。(B)
1甲11:1*11,可知1和11。(A)
1甲12:1*12,2*6,3*4。(B)
以下略,易证得两数之积为素数或素数的平方时为已知推断,否则为未知推断。
二、乙说:“我也不知道”
1. 对于乙,若两数之和只有一种拆分可能,则乙会做出已知推断,与乙第一次未知的事实不符。
2. 若至少有两种拆分可能,则乙可在假设某一种拆分的情况下,算得两数之积,然后假设自己为甲做出推断,并得到相应的结论:(A)若在假设的某一种拆分的情况 下甲会做出已知推断,则该情况与甲第一次未知的事实矛盾;(B)若有且只有一种拆分的情况下甲会做出未知推断,则乙可做出已知推断(就是这种拆分),与乙 这次未知的事实矛盾;(C)若有至少两种拆分的情况下甲都会做出未知推断,则乙做出未知推断,符合乙这次未知的事实。
1乙3:1+2,可知1和2。(A)
1乙4:1+3,可知1和3。(A)
1乙5:1+4,则1甲4;2+3,则1甲6。(B)
甲8。(B)
1乙7:1+6,则1甲6;2+5,则1甲10;3+4,则1甲12。(C)
1乙8:1+7,则1甲7;2+6,则1甲12;3+5,则1甲15。(C)
1乙9:1+8,则1甲8;2+7,则1甲14;3+6,则1甲18。(C)
1乙10:1+9,则1甲9;2+8,则1甲16;3+7,则1甲21;4+6,则1甲24。(C)
以下略,易证得皆为未知推断。
三、甲说:“那我知道了”
对于甲,在排除第一次的已知推断后,在剩下的推断中两数之积必有两个或以上的拆分可能。那么甲可在假设某一种拆分的情况下,算得两数之和,然后假设 自己为乙做出推断,并得到相应的结论:(A)若至少有两种拆分的情况下乙都会做出未知推断,则甲只能做出未知推断,与甲这次已知的事实矛盾;(B)若有一 种拆分的情况下乙会做出未知推断,符合乙第一次未知的事实,则甲可做出已知推断,符合甲这次已知的事实。
2甲6:1*6,则1乙7;2*3,则1乙5。(B)
2甲8:1*8,则1乙9;2*4,则1乙6。(B)
2甲10:1*10,则1乙11;2*5,则1乙7。(A)
2甲12:1*12,则1乙12; 2*6,则1乙8;3*4,则1乙7。(A)
以下略,易证得皆为未知推断。
四、乙说:“那我也知道了”
对于乙,在排除上次的已知推断后,在剩下的推断中两数之和必有两个或以上的拆分可能。那么乙可在假设某一种拆分的情况下,算得两数之积,然后假设自 己为甲做出推断,并得到相应的结论:(A)若假设的所有拆分情况下甲都会在第二次做出未知推断,则该情况与甲第二次已知的事实矛盾;(B)若有一种拆分的 情况下甲会在第二次做出已知推断,符合甲第二次已知的事实,则乙可做出已知推断,符合乙这次已知的事实。
2乙7:1+6,则2甲6;2+5,则2甲10;3+4,则2甲12。(B)
2乙8:1+7,则2甲7;2+6,则2甲12;3+5,则2甲15。(A)
2乙9:1+8,则2甲8;2+7,则2甲15;3+6,则2甲18;4+5,则2甲20。(B)
2乙10:1+9,则2甲9;2+8,则2甲16;3+7,则2甲21;4+6,则2甲24。(A)
蓝色标注的情况早在第一次推断就被排除,不予考虑。以下略,易证皆为未知推断。
结论
当两数为1和6时或1和8时,甲乙各自的两次推断结论均满足题目所描述的事实。
最后留一个练习:如果两个数可以相同,那这道题是否有唯一解?如果有,解是什么?
甲乙(数理逻辑)转自http://www.cnblogs.com/devymex/p/3329635.html的更多相关文章
- 用python实现了一下:甲乙两人互猜数字(数理逻辑)
今天在园子里看到博客:超难面试题:甲乙两人互猜数字(数理逻辑).然后琢磨了半天,写了个Python程序实现算法,我得出来的结果是1,6或1,8或35,42的组合, 不知道是否正确,请高人指点? 下面列 ...
- 夕甲甲——孔乙己之C++版
欧欧匹代码的格局,是和别的编程模式不同的:首先要有一个构造函数:基类里只定义了函数的形式,可以随时通过派生增加不同的实现.那些程序员们,每每学会了继承和多态,便可以接一个项目,——这是十年前的事,现在 ...
- 转 夕甲甲:孔乙己之 C++ 版
欧欧匹代码的格局,是和别的编程模式不同的:首先要有一个构造函数:基类里只定义了函数的形式,可以随时通过派生增加不同的实现.那些程序员们,每每学会了继承和多态,便可以接一个项目,——这是十年前的事,现在 ...
- catalan---卡特兰数(小结)
(关于卡特兰数的详细介绍)http://baike.baidu.com/view/2499752.htm 下面有练习的题目: 经过测试,_int64/long long 最大只能表示到33位,超过这个 ...
- [转载]获取当前日期和农历的js代码
原文地址: http://www.cnblogs.com/Gnepner/archive/2011/09/07/2169822.html 获取当前日期时间: function GetCurrentDa ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 24种设计模式--命令模式【Command Pattern】
今天讲命令模式,这个模式从名字上看就很简单,命令嘛,老大发命令,小兵执行就是了,确实是这个意思,但是更深化了,用模式来描述真实世界的命令情况.正在看这本书的你,我猜测分为两类:已经工作的和没有工作的, ...
- ECOS- 技术问题答疑[转]
http://bbs.ec-os.net/read.php?tid=37 1.为什么我购买的是源码版,但是我的base/ego.php(或者base/ego/目录下文件)却是加密的? 答:ego 源 ...
- ecos 问题答疑(转)
1.为什么我购买的是源码版,但是我的base/ego.php(或者base/ego/目录下文件)却是加密的? 答:ego 源码商业授权文件仅用于和商派软件签订源码协议的商业用户按照甲乙的源码保护约定 ...
随机推荐
- 转载 --ios 模型-setValuesForKeysWithDictionary
应用场景:app请求后端数据,返回的数据是JSON形式,如: { "is_favor" = 0; "is_follow" = 0; "is_prais ...
- linux用户管理
管理用户的文件 添加用户组 添加用户 修改权限
- 使用spring-data-solr做solr客户端
solr的客户端基本上只有一个,那就是solrj,spring-data-solr是在solrj的基础上做的封装,使统一成spring-data的风格 官方网站: http://projects.sp ...
- ORACLE 导出(exp) & 导入(imp)
导出(exp) & 导入(imp) 利用Export可将数据从数据库中提取出来,就是将select的结果存到一个FS二进制文件上 利用Import则可将提取出来的数据送回到Ora ...
- 模拟退火算法求解旅行商问题(附c和matlab源代码)
前几天在做孔群加工问题,各种假设到最后就是求解旅行商问题了,因为原本就有matlab代码模板所以当时就改了城市坐标直接用了,发现运行速度惨不忍睹,最后用上了两个队友的电脑一起跑.这次模拟结束后在想用c ...
- C++中string查找和取子串和整形转化
1.string.find函数 #include <iostream> #include <string> using namespace std; /* run this p ...
- DLL强名称引用问题
为没有源码的DLL文件添加强名称 如果项目中引用了其他没有源码的dll文件,并且此dll文件是没有强名称的程序集,则编译时会出现类似 "Assembly generation failed ...
- 选择本地照片之后即显示在Img中(客户体验)
最近转战MVC项目,然后又再次遇到照片上传的实现,之前都是使用ASP.NET,虽然也有照片上传,而且出于客户体验考虑, 也实现了选择本地照片之后即时显示在IMG中,在这里就简单介绍其实现(ASP.NE ...
- MySQL pdo预处理能防止sql注入的原因
MySQL pdo预处理能防止sql注入的原因: 1.先看预处理的语法 $pdo->prepare('select * from biao1 where id=:id'); $pdo->e ...
- JDK、JRE、JVM三者间的关系
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库.Java Runtime Enviro ...