第一篇:java抽象-老师的生日-逻辑思维-有趣的面试题-遁地龙卷风
(-1)写在前面
都快去北京了,硬生生的安排一场java考试,对于那些特别细节的东西我忘了吧也不觉得有什么不好,以前都记得,也都见过,只不过平时不常用连接断了,但是你死记硬背是没用的,一段时间后还是会忘,唯一的途径就是多做东西,理论联系实际,相反这道题我感觉很有意思,也在网上看到了很多解释,觉得都有所不足,下面是我给出的答案。
(0)详细解释
设一个老师的生日为M月N日.把M告诉学生甲(即学生甲知道老师出生的月份),把N告诉学生乙(即学生乙知道老师出生的日).现有如下日期是公开的:3月4日,3月8日,3月10日,6月4日,6月7日,9月1日,9月10日,12月1日,12月2日,12月8日 其中有一个是老师的生日.现有学生甲与学生乙的对话: 学生甲:如果我不知道的话,你一定不知道.学生乙:本来我不知道的,现在我知道了.学生甲:那我也知道了.现在问:老师的生日是哪一天? 甲的第一句话
首先我们看数据有哪些特性,数据是由月份和日期组成的,甲是知道月份的,数据中的月份有3,6,9,12,甲不能通过自己知道的月份信息判断出老师的生日,甲知道乙无法通过日期推测出正确的月份。甲知道的是3 月 日期有4,8,10 甲知道的是6月 日期有4,7 甲知道的是9 月 日期有1,10 甲知道的是12月 日期有2,8
我们发现7日、2日是唯一的,也就说明,如果甲知道的是六月,那么乙知道的是7日,就推测出生日,甲就不会说你一定不知道,所以甲知道的不是6月,同理,甲知道的也不是12月。
乙的第一句话
根据甲的第一句话,剩余数据如下: 甲知道的是3 月 日期有4,8,10 甲知道的是9 月 日期有1,10 乙的前半句话有歧义,第一种情况,乙认为甲能够通过月份推出生日,那么乙的日期就是2或7,这与甲第一句话得出的结论不符。那么就是第二种情况,乙此时通过甲的话推断出上述结论,根据自己的日期判断出了甲的月份,显然10是不对的,如果是10,甲的月份就不唯一。那么数据如下: 甲知道的是3 月 日期有4,8 甲知道的是9 月 日期有1 这样看来似乎3月4日,3月8日,9月1日都是可以的,因为乙知道1,4,8中的任意一个对应的月份都是唯一的
甲的第二句话
这句话把答案推向了9月1日,因为对于甲来讲,如果他知道的是3月,对于老师的生日就3月4日和3月8日两种选择,而如果他知道的是9月,就只有9月1日这一种答案。