转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/45887395
http://www.llwjy.com/blogdetail/208a6ac5e85d6078810047731d02c062.html
个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~
-------------------------------------------------------------------------------------------------
问题描述
25匹马,5个跑道,每次只能泡5匹,用最少的次数选出最快的前3匹?
解决方案
下面的解决方案最少7次,具体如下:
1)把25匹马随意分成5组,分别赛跑,记录每组的名次;
2)从这5组中分别取出每组的第一名,跑第六场,假如第六场的名次如下:第一名在X组、第二名在Y组、第三名在Z组、第四名在J组、第五名在K组;
3)取X组的第二名、第三名,Y组的第一名、第二名,Z组的第一名来跑第7场;
最后前三的结果就是:第一名是第六场的第一名,第二名是第七场的第一名,第三名是第七场的第二名。
解决方案分析
解决方案中的第一步我们就不再啰嗦了,就从第二步开始,在第六场中,我们取每组的第一名来赛跑,可以得到第六场的第一名一定是所有马中最快的,所以第一名也就确定了,同时第六场跑完之后,所有马的最高名次也就确定了,我们简单描述如下:
组别:小组第一 小组第二 小组第三 小组第四 小组第五
X组: 第一名--最好第二--最好第三--最好第四--最好第五
Y组:最好第二--最好第三--最好第四--最好第五--最好第六
Z组:最好第三--最好第四--最好第五--最好第六--最好第七
J组:最好第四--最好第五--最好第六--最好第七--最好第八
K组:最好第五--最好第六--最好第七--最好第八--最好第九
因此我们第七次只需要把可能是前三的马匹(X组的第二名、第三名,Y组的第一名、第二名,Z组的第一名)(正好5匹)来赛跑第七场,我们就可以知道前三的马匹是哪3匹了。
面试拓展
上面这个题目可以当作面试题,用来考验被面试人的思维方式,如果是计算机相关的,我们还可以把这个题目稍微变型下,让它成为计算机的需求描述,下面是我的改编:
问题描述:目前存在一个接口,可以给出用户活跃度之间的排序(降序),但是这个接口有一个缺点,一次做多可以处理5名用户,现在有25名用户,最少调用多少次这个接口可以获得活跃度前三的用户?
当然关于这个题目的改编应该会有很多,介绍这个题目的目的就是想说名一个问题,我们在完成一步之后(第六场),在开始下一步的时候希望可以停下来想一想,这一步完成了是否对整体有影响,也许就是这个停下来,能够让我们少走很多的弯路。
另一个面试题
这还有一个面试题目,也是考验思维方式的,这里和大家分享下:有1000瓶液体(正常,无毒),但是由于工作人员失误,将毒药滴到了其中一瓶中,从外观和气味上完全无法分辨出那一个是被污染过的,我们只知道这个毒药的毒发期是7天,实验室有10只小白鼠,只有7天的时间,如何实验才能知道哪一瓶是被污染的?
原文地址:http://blog.csdn.net/xiaojimanman/article/details/45887395