猜生日

hasekell编程作业想不下去,就打算换个事做做,写一篇博文吧。

在群里,一个家伙提出了这个题目,说是微软面试题,但是没有思路,就拿过来看看


题目如下:
小明和小强都是张老师的学生,张老师的生日是M月N日,
2人都知道张老师的生日是下列10组中的一天,
张老师把M值告诉了小明,把N值告诉了小强,
张老师问他们知道他的生日是那一天吗?
3月4日 3月5日 3月8日
6月4日 6月7日
9月1日 9月5日
12月1日 12月2日 12月8日
小明说:如果我不知道的话,小强肯定也不知道
小强说:本来我也不知道,但是现在我知道了
小明说:哦,那我也知道了
请根据以上对话推断出张老师的生日是哪一天
小明知道月份,小强知道日期
小明说如果我不知道,小强也不会知道,因为小明知道只知道月份,不可能知道,表明小强不知道,代表该月份的每一个日期都有重复的。
那么小强可以知道月份不是6月,不是12月,因为6.7,12.2都是唯一的
那么只有3月,9月,小强马上就知道了生日,表明日期在3月和9月是唯一的,那么可能是3月4,3月8,9月1
3个日子任何一个,小强都可以说知道了
但是小明通过小强知道了,自己就知道了,表明该月份只有一个特殊日子,那么就是9月,而不是3月,所以张老师9月1号生日
ps:要注意的是小明,小强,我们旁观者思路要分开,虽然有共同知道的信息,不然可能会混淆
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值