|  | 
				
					
	
		
			
 			Posted on 2005-11-16 18:24 非鱼  阅读(5952) 评论(40)  编辑  收藏   所属分类: 杂七杂八   是ZZ的,题目大约是个唬头,我觉得合格的程序员都应该可以算出来。
 
 小明和小强都是张老师的学生,张老师的生日是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值告诉了小强,张老师问他们知道他的生日是那一天吗?
 小明说:如果我不知道的话,小强肯定也不知道
 小强说:本来我也不知道,但是现在我知道了
 小明说:哦,那我也知道了
 请根据以上对话推断出张老师的生日是哪一天。
 
 
	    
    
评论
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2005-11-22 09:10 by 
				 该问题源于密码学中的非对称计算。
 很多人都应该直到Diffie-Hellman协议,该协议用于对等双方在不透露机密信息的情况下,协商密钥
 参看我以前的一篇随笔http://blog.csdn.net/huangzhq/archive/2005/05/23/378703.aspx 密码学是非常有趣的一门科学,我将来会在BEA UserGroup上面讲解,现在,我简要描述上面的是如何计算出老师的生日。
 当然,上述的题目从协议的角度算是脆弱的:)因为所有足够聪明的人都能计算出来。
 好,我们现在进入协议分析
 消息1,小明---〉小强:
  如果我不知道的话,小强肯定也不知道
 消息2,小强---〉小明
  本来我也不知道,但是现在我知道了 
 消息3,小明---〉小强
 小明说:哦,那我也知道了 
 小明知道M,小强知道N,
 为了交换M,N,且他们不想让M,N在网络上传送以免旁边的人都知道
 所以,消息1反映了这样一个事实,即小明已经通过M得知N不可能是2和7,因为这两日是没有重复的,
 于是,M,N可能组合是
 3,4   3,5  3,8
 6,4
 9,1  9,5
 12,1  12,8
 消息2反映了这样一个事实,即在上面的组合中,小强能计算出M,因此,生日只能是6,4,其他都是双解。
 上面是一个Trick,不足以说明密码学中的美妙,但体现了这样一种思路,非对称信息交换,它可是PKI的基础:)
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2005-11-22 10:53 by 
				 David, 这个问题应该多想想,和DH没有关系,和Key Agreement没有关系,和密码学没有关系。 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2005-11-22 14:50 by 
				 如果M为6或12的话,小强有可能知道,而小明肯定不知道,M月可能为3月或9月。
由小强的话可知,N可能为1日、4日或8日.
 小明第二句话可知,M月为9月,那N就为1了。
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2005-11-22 20:47 by 
				 sorry, 我是搞反了,哈哈。 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2005-11-29 23:40 by 
				 张老师把M值告诉了小明,把N值告诉了小强 
3月4日 3月5日 3月8日
 6月4日 6月7日
 9月1日 9月5日
 12月1日 12月2日 12月8日
 
 小明说:如果我不知道的话,小强肯定也不知道
 
 小明这么回答说明N有重复,因此n可能为4,5,1,8
 
 小强说:本来我也不知道,但是现在我知道了
 
 小强这么回答可推论出
 第一点:除了老师生日这一天,另外给出的那一天假设M月D日中的D不可能有重复的数字因此D不可能为1,4,5,8,因此9约可排除
 第二点:N在上面可选的月份中是唯一的,即1,4,5,8出现的机会只有一次,若M为3或12,小强根据它所掌握的信息不可能指导确切的日期,因此M月D日应为6月7日
 
 所以老师的生日应该为6月4日
 
 小明说的最后一句纯属废话。
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-01-10 23:51 by 
				 6月4日  
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-01-10 23:52 by 
				 6月4日 肯定不对!!!你们再想想吧@ 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-01-11 16:44 by 
				 9.1 
6.4不对 .只要想如果明拿了6 ,他不知道强是否拿的是7还是4,如果是7,强就可以一次确定! 所以明不能说我不知,强就不知!
 所以要排除月份里有2,7的,即月只能是3,9!
 当强知道月份只能是3,9 ,日期是1,4,8都可以唯一确定
 但是明又说他也知道了,证明是1,因为只有他恰好是9是,9.1可以确定,如果是3月,他是不可能确定的
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-01-13 19:52 by 
				 小明说:如果我不知道的话,小强肯定也不知道 
月份中的所有日期在其他月份均出现>排除6,12月
 小强说:本来我也不知道,但是现在我知道了
 3,9月中唯一的日期>排除5日
 小明说:哦,那我也知道了
 所余日期中唯一的月份>9月1日
 
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-03-01 12:45 by 
				 9.1是正解,两位的推理非常严密阿! 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-03-03 15:45 by 
				 我自己的见解吧,比较通俗的:
 其实小明的第一句话的前半句"如果我不知道的话"是废话,但又不是完全没用,主要是用来迷惑吾等旁观者的,害我头晕了那么久,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日!
 
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-03-06 20:45 by 
				 9.1 没错 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-03-06 20:45 by 
				 9.1 没错 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-03-17 01:34 by 
				    密码学,我觉得有点道理。
但是,如果小明和小强互相知道对方掌握着一个数字的话,而且这个数字无法直接得知老师的生日是几月几日(题目中显然是这种假设)。那么小强得到的这个N显然不是7和2(7和2是唯一的数字),推理可知小明得到数字肯定不是6(因为小明事先知道N不是7。如果小明自己得到的M是6的话,直接可以肯定是6月4日了。因为这样的话,拿到M的小明就等于是小强直接拿到7或2一样,直接得到答案了。)
 3月4日 3月5日 3月8日
 6月4日 6月7日
 9月1日 9月5日
 12月1日 12月2日 12月8日
 小明说:如果我不知道的话,小强肯定也不知道
 小强说:本来我也不知道,但是现在我知道了
 小明说:哦,那我也知道了
 请根据以上对话推断出张老师的生日是哪一天。
 如果小强得到的N不是4的话,得到M为3的小明才有可能永远猜不出老师的生日N到底是哪一天(M如果不是3,小明就没有道理讲出第一句话来。小明猜对方手里是4,心想不是4的话,我就不知道是几了,小强也猜不出我的月。于是有了第一句话,如果我不知道的话{不是4,我就不知道了,小强的5和8也同样肯定不知道是几月},小强肯定不知道{是4,小强有可能知道月是3,因为可以排除我拿到6,但是不是4,就肯定不知道了})。只有这样,小明才可能讲出第一句话来!!
 语言来表达上述的观点是很困难的,用思维来参悟并不难。
 小强说:本来我也不知道,但是现在我知道了  是因为小强收了小明的启发,想到了这一点(这一点指的是小明拿到的M肯定不是6,是6就等于自己拿到了7和2一样。)所以拿到了N为4的小强一下子就从    3月4日 3月5日 3月8日
 6月4日 6月7日
 里得到到了3月4日这个答案。
 所以才有了最后小明的这句话:哦,那我也知道了  小明听了小强的话,坚定了自己的想法,就是小强的确拿到的N是4(如果不是4,小明和小强都不透露自己的数字,双方永远都无法确定老师的生日,因为N不是7或2是明显的。M不是6是暗藏的,要推理的,这里小强是通过小明语言的暗示才推理到M不是6)。所以就从3月份中确定了是3月4日。
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-04-26 16:50 by 
				     典型的博弈过程
1、首先排除6月的7和12月的2,因为这两天是唯一的,只需要知道日就可以确定生日。
 2、博弈过程:小明是知道月的,但是他想借助小强来排除不确定的日,所以他试探性的问"如果我不知道,小强肯定不知道",小明前提回答N有重复,因此n可能为4、1、5、8,他想借助小强排除重复的日。M则不定
 3、结果小明回应他"本来不知道,现在却知道了”,小明如果知道月,小强知道的日,小强借助小明的询问确定了小名想借助小强的回答确定是6月4日或者7日,结果小强的回答帮助小明排除了6月7日,只有这样,小明才能确定日是4,小明在前提设立了一个假设条件,即:“如果我不知道,小强肯定不知道”,说明了小明的意思就是想让小强排除6月7日,小强则揣摩了小明的意思,说出本来我不知道,现在却知道了,即6月4日。其他都是双解
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-06-02 10:16 by 
				 这种题出给小学生还真不错! 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-07-13 13:59 by 
				 我不知道什么密码学也不知道什么是对称学,我只知道结果是6月4日。因为从小明的那话可以得出结论,只有6月4日是剩余答案,其他都有2个结果。SO简单的问题嘛 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-07-14 09:43 by 
				 霖雨的分析是对的,而且很详细:) 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-10-05 23:09 by 
				 的确,霖雨分析的很严密。而且也是正确的。高手啊!!佩服!! 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2006-10-18 11:27 by 
				 是9.1 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-08-15 22:28 by 
				 9.1 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-08-15 22:39 by 
				 排除法:
小明说:如果我不知道的话,小强肯定也不知道--说明已经不是6月和12月
 小强说:本来我也不知道,但是现在我知道了 --已经不是5了,如果是5的    话他自己也不知道是3月还是9月
 小明说:哦,那我也知道了--说明已经是9月了,如果是3月的话,就不知道    3月4日还是3月8日.
 所以推出的答案是9月1日.
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-08-15 22:48 by 
				 排除法: 
小明说:如果我不知道的话,小强肯定也不知道--如果小强是2和7的话,小强肯定知道了,说明已经不是6月和12月了.
 小强说:本来我也不知道,但是现在我知道了 --已经不是5了,如果是5的话他自己也不知道是3月5日还是9月5日.
 小明说:哦,那我也知道了--说明已经是9月了,如果是3月的话,就不知道3月4日还是3月8日.
 所以推出的答案是9月1日.
 
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-08-28 06:18 by 
				 @地方错了,不是。
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-09-17 16:10 by 
				 同传租赁  同声传译翻译公司  同声传译设备租赁  同声传译 同传租赁  同声传译 同声传译设备租赁  同传租赁 北京同传设备租赁 上海同声传译设备租赁  同声传译  同声翻译公司  
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-11-10 17:50 by 
				 我想是:6月4号
 这样看
 月份     日期
 3        4  5  8
 6        4  7
 9        1  5
 12       1  2  8
 
 我们现在就说小明知道的是:6月
 
 首先,从上面的日期得知6月7和12月2日,的日期那个数是唯一的,这两个日期包含了6月
 第一个
 小明说:如果我不知道的话,小强肯定也不知道 .
 他要问小强是不是这两个(6月7和12月2日),就是要告诉他,他有6或12
 
 小强说:本来我也不知道,但是现在我知道了
 "本来我也不知道",回答了他不是上面那两个,(6月7和12月2日)
 "但是现在我知道了"回答他本来是在两个数字中犹豫(因为4字日期的有,3月4号和6月4号),
 
 他说他现在知道了那就是说是6月4号了,
 
 所以小明说:哦,那我也知道了
 
 
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-12-13 21:29 by 
				 如果我猜肯定猜9.1
非常有建设性的答案...为什么?不知道...应试教育...
 re:看了上面的分析,感觉是9.1把
 分歧点是第一句话:小m肯定小q不知道..
 1.不是2,7号
 2.不是6,12月份
 
 你觉得呢?
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-12-13 21:33 by 
				 其实是语文的问题...咬文嚼字..咬文嚼字.. 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2007-12-14 20:40 by 
				 不想多说,根本都不严谨。
==小明是怎么知道不是3月的那两天哪?
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2008-01-11 09:32 by 
				 都是高智力者,什么答案都用书本上的知识来推理,那这就很容易多了。
可结果就那么容易吗?
 我的答案是:6月7日
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2008-03-12 23:20 by 
				 3月4日 3月5日 3月8日 
6月4日 6月7日
 9月1日 9月5日
 12月1日 12月2日 12月8日
 
 M=月 N=日
 M=3,6,9,12
 N≠1,2,4,5,7,8,10,11
 所以以上得出
 9月1日 是没有数字重叠和冲突的~
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2008-05-19 16:40 by 
				 91 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2008-06-24 20:33 by 
				 不会是6月7日或12月2日,因为7日和2日是十组中的唯一。从而小明的第一句话否定了两个组,6月组和12月组,而只可能是3月或9月,小强在否定了两个月组就能直接得到答案,是因为他得到的是一个1、4或8,但只有1能满足小明能因此得到答案。9月1日,正解! 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2008-07-18 15:10 by 
				 不同人看问题,角度不一样,思维不尽相同。有密码学,博弈论,推理学,情理思考,换位思考,案件重演等等。
 
 两个最具争议答案,9月1与6月4
 
 如果两人有人玩阴的,那就是6月4
 
 如果两人都比较直白,那就是9月1
 
 而如果是中国应试教育,答案当选9月1
 而如果是在美国出的思考题,答案不唯一,其中6月4跟9月1都是正确的答案。
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2009-03-19 17:55 by 
				 那么为什么要给出最后一句话呢?
这道题如果没有最后一句话的话,那么将有两个答案,6.4和3.4.
 但是,有了最后一句话的话,那么小明透露出的信息就是他之前不知道
 有了这句不出,答案就只有3月4日了
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2009-06-10 12:40 by 
				  你的说法不对
你说最后剩下3/4 3/8 9/1  应为3月有两组 所以是9/1,,
 可是3/4很早就被排除了
 一开始就知道6/7 不可能   而小明不知道答案 所以不可能是6月 那么4号也就不可能  接着3/4 也被排除
 最后剩下的是9/1 和3/8   这两个选一个 我还不确定
 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2010-07-15 06:49 by 
				 9月1 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2010-08-06 16:42 by 
				 应该是6月7号,这样,小强分析如果是三月份的话,三月份的日期4号5号8号,在每个月份上都有,所以小明根本不可能肯定,那么,三月份跟4号5号8号可以排除 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论
						  
					
					2011-09-23 15:26 by 
				 撒旦发生大幅是否 
				
					
						# re: 月薪3万的一道面试题------看看你的IQ [未登录]  回复  更多评论
						  
					
					2012-09-27 17:04 by 
				 9月1号 |