生日推算

小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天:
  3月4日 3月5日 3月8日
  6月4日 6月7日
  9月1日 9月5日
  12月1日 12月2日 12月8日
张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗?
  小明说:如果我不知道的话,小强肯定也不知道
  小强说:本来我也不知道,但是现在我知道了
  小明说:哦,那我也知道了
  请根据以上对话推断出张老师的生日是哪一天。


:idea: 其实小明的第一句话的前半句"如果我不知道的话"是废话,但又不是完全没用,主要是用来迷惑吾等旁观者的,害我头晕了那么久,BS他!!.回过头来,在已知条件中的4个月份都有两个以上的日数,所以只知道月数的小明是肯定不知道的,所以他的第一句话其实是"小强肯定不知道",因为他是这样想的,他看到条件中有两个比较特别的日子: 6月7日 和12月2日,日数是唯一的.如果N是7或2的话,小强的肯定知道了.所以只要小强先开口说知道了,那肯定是这两个其中一个,知道月份的小明自然也会知道是两者中的哪一个.但小明不等小强先开口却先一口咬定"小强肯定不知道".为什么他会这么肯定?我们分析一下,小强也不知道的情况只能是除6月7日 和12月2日外的日期了,因为都有重复的日数.小明怎么就这么确定不是这两个日期呢?显而易见,他知道的月数不是6和12.所以,小明无意中透露了第一句话的潜台词就是"M不是6或12",也就是M=3或M=9.
现在的条件就过滤为:
3月4日 3月5日 3月8日
9月1日 9月5日
5个日期了

小强听了小明的话后,一开始有点惊讶小明怎么就这么确定我也不知道呢,仔细想想,很快用同样的思路悟出小明的话中含义.根据现在已知条件,小强也得出了结论:"现在我知道了 ",但他为了要挫一下小明的锐气,就在前面先来慢慢叹半句"本来我也不知道".我们再来分析,他现在能知道的情况下只有日数没有重复的日期符合条件,所以X月5日可以排除了,我们剩下可选择的日期就只有:
3月4日 3月8日
9月1日
3个日期了

小明听到小强确认"本来我也不知道"后心里微微一笑"大家都半斤八两吧",但后半句就吓了他一跳."我靠,不是吧,刚说你不知道,马上就说知道了?搞什么东西嘛!".小明也不笨,他也马上分析到小强知道的原因和得出上面的条件来.只有两个不同的月份,知道月数的他当然也能很快的确定是哪日期了,不甘心落后的他马上说"哦,那我也知道了".我们最后分析,虽然剩下的三个日期中只有两个不同的月数,但3月的日数有两个,而不知道日数的小明也能确定下来的,那就只有9月1日这个只有一个日数的了,所以,老师的生日就是9月1日!
2023秋-B-2 生日推算 比赛已经结束。新提交将被视为补题提交,不计入比赛成绩。 题目描述 有一道推理题的原文是这样的:甲、乙、丙、丁、戊的生日是在连续的五天里,先后顺序满足以下条件: 甲比丙大几天,乙就比戊小几天; 丁比戊大 2 天; 丙的生日是在星期三。 问另外四人的生日分别在星期几? 现在我们把条件一般化,任意打乱他们的顺序,任意给定其中一人的生日,请你编写程序推算另外四人的生日分别在星期几。 注意到在上述条件描述中,只有"戊"这个人是没有任何信息直接给出的,其他人都有一个与他人关系或自己生日的描述。 输入格式 输入分 5 行,每行给出一个人的已知信息。其中: 如果是一个 [1, 7] 区间内的整数,则表示这个人的生日已知。数字 1 到 7 顺次表示星期一到星期日。 如果是一个问号 ?,则表示这个人是原文中的"戊",没有任何信息直接给出。 如果是 -2,则表示这个人比 ? 对应的人大 2 天。 如果是 -x,则表示这个人比那个生日已知的人大 x 天。 如果是 +x,则表示这个人比 ? 对应的人小 x 天。 输出格式 在一行中按照输入的顺序给出对应每个人的生日,数字间和行首尾都不要有空格。 样例 输入数据 1 3 ? -2 -x +x 输出数据 1 32714 注意:星期一的前一天是星期日。样例输出中,第三个人最大,是星期日过生日。 限制 对于所有的测试用例,限制为400 ms, 64 MB
10-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值