1、发信人: goldon (goldon), 信区: Job WWW-POST标 题: 微软面试题已知两个数字为 130 的,甲知道两数只和,乙知道两数之积,甲问乙:“你知道是那两个数吗?”乙说:“不知道”。乙问甲:“你知道是那两个数吗?”甲说:“也不知道”。于是,乙说:“那我知道了”随后甲也说:“那我也知道了”这两个数是什么?- 来源:武汉白云黄鹤站 WWW . FROM: 202.114.6.101 发信人: gzhyun (夜归人), 信区: Job标 题: 微软面试的答案发信站: 武汉白云黄鹤站 (2001 年 11 月 10 日 19:37:44 星期六), 站内信件答案是 1,6 吧
2、!这个题目我是先在 csdn 上看到的,的确很经典!按我的想法是这样的:因为甲知道两个数的和,乙知道两个数的积,如果这两个数的和是 1,显然是不对的,如果是 2,那就只可能是 1+1,甲就应该知道这两个数是多少,如果是 3,就只能是 1+2,如果是 4,只能是 2*2,乙就应该这两个数是多少,是 5 的话,就只能是 1*5,乙同样还是知道,如果两个数和是 6 的话,有的同学可能要说这下如何分析呢?我提醒你题目中还告诉了你一个条件,就是在乙得知甲不知道这个数后,说我知道了,而后甲马上也说知道了,让我们来分析 1,和 6 的情况吧!和为 7 的可能有 1,6;2,5;3,4。积为 6 的情况有 1
3、*6;2*3。你现在所做的还有一个事情是要知道,甲现在是知道和为 7,乙知道积为 6,也就是说乙知道这两个数不是 1,6 就是 2,3。当他问了甲之后,当然就可以肯定是 1,6 了(因为如果为 2,3 的话,甲知道和为 5,就应该知道这两个数的具体值)。同理,当甲得知以上情况后,分析可知,必是1,6(如果积为 10,12,乙是猜不出两数的具体值的,因为组合太多)所以说答案是 1 和 6,我也只能用这种很笨的排除法和试探法解出结果。不知大家有没有什么好的方法。- 来源:武汉白云黄鹤站 FROM: 211.69.193.208发信人: poet (逍遥诗人), 信区: Job标 题: Re: 微软
4、面试的答案发信站: 武汉白云黄鹤站 (2001 年 11 月 11 日 10:17:37 星期天), 站内信件你的题目不清楚,所以你做的答案不对,因为,题目是要排除 1 这种情况的,否则答案有很多很多。两个数都不可以为 1。题目应该是这样叙述的有两个数 a,b 都在 2-98 的范围内。然后 X 知道 a+b 的值,Y 知道 a*b 的值。然后 X 对 Y 说:我不知道 a,b 是什么数,但是我肯定你也不知道。然后 Y 对 X 说:我开始确实不知道 a,b 是什么数,但是听你这么说,我就知道这两个是什么数了。然后 X 对 Y 说:呵呵,我也知道这两个是什么数了。问:这两个是什么数?正确答案是
5、4, 13标 题: 微软面试题的参考程序发信站: 武汉白云黄鹤站 (2001 年 11 月 11 日 10:27:00 星期天), 站内信件这个程序是一个网友写的,用的是 LPC 语言。不过可解析成 Pike 语言,要翻译成 C 恐怕得费点工夫。我运行过是正常的。int main(object me)int i,j;mapping he=(),ji=(),he2=(),he3=();string temp_he,temp_ji,sub_temp_he;string *keys_ji,*keys_he,*keys_he3;write(“begin.n“);for (i=2;i1)sscanf(he3temp_he001,“%d“,i);sscanf(he3temp_he023,“%d“,j);write(“AABB=“+he3temp_he0+“;积“+(i*j)+“;和“+temp_he+“n“); return 1;- 来源:武汉白云黄鹤站 FROM: 203.93.229.44