1.有25匹马,每匹马都以恒定的速度赛跑,当然马与马之间的速度是不相等的,总共有5个赛道,就是说每轮最多只能有5个马同时赛跑。问题是:要确定出跑的最快的前三名马,需要最少多少轮比赛? 不能计时。 

同样35匹马,6赛道,去前三的为8次。

 7场是最少的了   
  首先是先全部都比一次:   
  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   
  
  这5次是必须的  

 
  然后贪心,分别找出第一,第二,第三   
  先A1   B1   C1   D1   E1,这样可以得到第一,不妨设这组结果为A1   B1   C1   D1   E1, A1第一   

  现在已经比了6次

  有了上面6组结果可以肯定第二在A2 B1中   
  如果第二是A2,那么第三肯定在B1   A3中   
  如果第二是B1,那么第三肯定在A2   B2   C1中
  
  A1 (第一)  A2   A3
  B1 (第二)  B2   (B3 被淘汰) 
  C1 (第三)  (C2   C3 被淘汰)


  所以现在我们只要知道了A2   A3   B1   B2   C1的大小顺序就可以判断第二第三分别是谁   
  所以总共需要7次比赛就可以了  (网友Dave提供,迄今为止感觉最合理的答案 )

2.你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?(答案:533.333……)

3.。下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案。

int n = 20;
for(int i = 0; i < n; i--){
    printf("-");
}
答案:1.for(...;-i<n;...)
   2.for(...;...;n--)
     3.for(...;i+n;...)
posted on 2011-04-21 17:40  aodixius  阅读(284)  评论(0编辑  收藏  举报