你的位置:首页 > Java教程

[Java教程]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日这一种答案。