面试第2题:25人赛跑用最少次数找出前三名

273 阅读1分钟

1.问题描述

25个人赛跑,5条跑道,在没有秒表的情况下如何用最少的次数找到跑得最快的3个人?

2. 分析步骤

(1) 第一步:25个人分5组

  • 一组:a1, a2, a3, a4, a5;
  • 二组:b1, b2, b3, b4, b5;
  • 三组:c1, c2, c3, c4, c5;
  • 四组:d1, d2, d3, d4, d5;
  • 五组:e1, e2, e3, e4, e5;

(2) 第二步:找出5个第一名

  • 这5组分别跑一次,得出5个第一,假设是:a1,b1,c1,d1,e1

(3) 第三步:找出第一名

  • 让5个第一名跑一次就能得出第一名,假设是a1,此时用的次数是 6次
  • 得到了五个第一名的排序顺序,假设是:a1,b1,c1,d1,e1

(4) 第四步:排除前3名以外的组

  • 因为我们是要找前3名,所以d1、e1(他们是第四、第五名)所在的组就不用考虑了

(5) 第五步:找出第二、第三名 现在要考虑的是:

  • a1,b1,c1,d1,e1 中的 c1;
  • 第一组的a2,a3
  • 第二组的b1,b2;
    这五个人跑一次,就能决定出第二名、第三名

3. 结论

故需要跑 7次 就能找到前3名