题目是:小明和小紅都是张老师的学生,张老师的生日是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日 
小明说:如果我不知道的话,小紅肯定也不知道 小紅说:本來我也不知道,但是现在我知道了 小明说:哦,那我也知道了 请根据以上对话推断出张老师的生日是哪一天 
推断:排除法,看看这几个日期:
3月4日 3月5日 3月8日 6月4日 6月7日 
9月1日 9月5日 12月1日 12月2日 12月8日M 月份有: 3 ,6, 9 ,12N 日有:1, 2, 4, 5, 7, 8,
        9   12  3   3   6   3
        12      6   9       12
小明知道M.
小紅知道N.
小明说:如果我不知道的话,小紅肯定也不知道 
小明为什么敢这样说呢?如图所示
      N  1, 2, 4, 5, 7, 8,
      M  9   12  3   3   6   3
      M  12      6   9       12
假设如果是2日,小明就不用说就知道生日了(小明之前不知道生日:因为他后面说”哦,那我也知道了“)。所以排除12M和6M。2日和7日。
      
1.小明会想是哪一日呢?
如图所示      N  1,  4, 5,  8,
      M  9    3   3    3
      M           9 
2.小红会想现在就3M和9M了。是哪一月呢?
 如图所示
   
     M 3, 9
     N 4  1
     N 5  5
     N 8小明说了这句话后小紅说:本來我也不知道,但是现在我知道了 .
把12M和6M给排除了后小紅就知道答案了!显然5日排除。如果是5日小紅是不知道答案的。
 
如图所示    
     N  1,  4,  8,
     M  9    3    3     M 3, 9
     N 4  1  
     N 8
再显然3日排除。如果是3日小紅会有4月还是9月的选择,也是不知道答案的。
小明接着就说:哦,那我也知道了 。也说明了排除3日这一点。所以老师的生日就是9月1日了。您理解了吗!呵呵。还是在纸上化方便些。

解决方案 »

  1.   

    我是在programmer杂志上看到的,当时明白是9月1日。可讲不清楚,所以用纸划出来了,比较好明白.用程序写出来写出来?没有必要吧!~
      

  2.   

    说的是这个
    http://community.csdn.net/Expert/topicview.asp?id=4860473
      

  3.   

    我的答案是3.4,
    先去掉6.7和12.2(因为单从N就可以知道),
    然后剩下的这些对第一个条件仍然有效,若M已知,N仍然未知的情况,
    只能去掉6.4,因为单从M上可以推算出来.
    那么剩下的这些里面再用第二个条件排除,若N已知那么M也知道了,
    只能是N==4,那么只有3.4符合所有条件
      

  4.   

    我的答案是3.4,
    先去掉6.7和12.2(因为单从N就可以知道),
    然后剩下的这些对第一个条件仍然有效,若M已知,N仍然未知的情况,
    只能去掉6.4,因为单从M上可以推算出来.
    那么剩下的这些里面再用第二个条件排除,若N已知那么M也知道了,
    只能是N==4,那么只有3.4符合所有条件