潜鱼在渊

Concentrating on Architectures.

posts - 77, comments - 309, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

月薪3万的一道面试题------看看你的IQ

Posted on 2005-11-16 18:24 非鱼 阅读(5907) 评论(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 david.turing
该问题源于密码学中的非对称计算。
很多人都应该直到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 JGroup
sorry, 我是搞反了,哈哈。

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2005-11-29 23:40 by satan77
张老师把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 lin
6月4日

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2006-01-10 23:52 by lin
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 Erik
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 chin yi
典型的博弈过程
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 comdiy
是9.1

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2007-08-15 22:28 by lixuanzhan
9.1

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2007-08-15 22:39 by lixuanzhan
排除法:
小明说:如果我不知道的话,小强肯定也不知道--说明已经不是6月和12月
小强说:本来我也不知道,但是现在我知道了 --已经不是5了,如果是5的    话他自己也不知道是3月还是9月
小明说:哦,那我也知道了--说明已经是9月了,如果是3月的话,就不知道    3月4日还是3月8日.
所以推出的答案是9月1日.

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2007-08-15 22:48 by lixuanzhan
排除法:
小明说:如果我不知道的话,小强肯定也不知道--如果小强是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 huanxiaowenzi
我想是: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 wxq
如果我猜肯定猜9.1
非常有建设性的答案...为什么?不知道...应试教育...
re:看了上面的分析,感觉是9.1把
分歧点是第一句话:小m肯定小q不知道..
1.不是2,7号
2.不是6,12月份

你觉得呢?

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2007-12-13 21:33 by wxq
其实是语文的问题...咬文嚼字..咬文嚼字..

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2007-12-14 20:40 by 不想多说,根本都不严谨
不想多说,根本都不严谨。
==小明是怎么知道不是3月的那两天哪?

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2008-01-11 09:32 by 1
都是高智力者,什么答案都用书本上的知识来推理,那这就很容易多了。
可结果就那么容易吗?
我的答案是:6月7日

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2008-03-12 23:20 by okokkw
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 tommin
不会是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 IQ博士
不同人看问题,角度不一样,思维不尽相同。
有密码学,博弈论,推理学,情理思考,换位思考,案件重演等等。

两个最具争议答案,9月1与6月4

如果两人有人玩阴的,那就是6月4

如果两人都比较直白,那就是9月1

而如果是中国应试教育,答案当选9月1
而如果是在美国出的思考题,答案不唯一,其中6月4跟9月1都是正确的答案。

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2009-03-19 17:55 by HJK
那么为什么要给出最后一句话呢?
这道题如果没有最后一句话的话,那么将有两个答案,6.4和3.4.
但是,有了最后一句话的话,那么小明透露出的信息就是他之前不知道
有了这句不出,答案就只有3月4日了

# re: 月薪3万的一道面试题------看看你的IQ   回复  更多评论   

2009-06-10 12:40 by dsa
你的说法不对
你说最后剩下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 zzzzz
撒旦发生大幅是否

# re: 月薪3万的一道面试题------看看你的IQ [未登录]  回复  更多评论   

2012-09-27 17:04 by 阿伟
9月1号

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问