关于一道面试题

时间:2021-10-20 17:07:52

  今天早上看博客发现有两个朋友分别对一道面试做了讨论,我很感兴趣,所以也凑个热闹。
  今天碰到一道比较有趣的面试题,大家来探讨一下。
  有感于--"今天碰到一道比较有趣的面试题,大家来探讨一下。"

原题:
  甲乙两地相距100公里,有一辆火车以每小时15公里的速度离开甲地直奔乙地,另一辆火车以每小时20公里的速度从乙地开往甲地。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从甲地出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟往返了多少次

  因为我看到有很多前辈的评论说原题不是很严谨,咱们平时工作中也有很多不严谨的地方,难到工作就不做了吗?所以我们要对问题进行适当的假设,上面的这个题目也不例外,我们先假设一下。

假设:
  甲乙两点相距100公里,甲点以每小时15公里的速度直奔乙点,乙点以每小时20公里的速度直奔甲点。丙点以每小时30公里的速度和甲乙两点同时启动,从甲点出发,碰到另一点后返回,依次在两点之间来回移动。直到两点相遇,请问,丙点往返了多少次?

解:
A1 = 100 / (30 + 20)                    //丙点第一次与乙点相遇的时间
A2 = 100 - A1 * 20 - A1 * 15        //丙点与乙点相遇时甲乙两点之间的距离

B1 = A2 / (30 + 10)                     //丙点离开乙点后与甲点相遇的时间
B2 = A2 - B1 * 20 - B1 * 15         //丙点与甲点相遇时甲乙两点之间的距离

。。。

根据以上的分析得出如下程序:

using  System;

namespace  ConsoleApplication5{
    
class  Program{
        
static   void  Main( string [] args){
            
            
double  Distance  =   100 ;   // 两点之间的距离
             double  A_speed  =   15 ;     // 甲点的移动速度
             double  B_speed  =   20 ;     // 乙点的移动速度
             double  Bird_speed  =   30 // 丙点的移动速度

            
int  num  =   0 ;
            
while  (Distance  >   0 ) {
                
//
                Distance  =  Distance 
                           
-  Distance  /  (B_speed  +  Bird_speed)  *  A_speed 
                           
-  Distance  /  (B_speed  +  Bird_speed)  *  B_speed;
                
//
                Distance  =  Distance 
                           
-  Distance  /  (A_speed  +  Bird_speed)  *  A_speed 
                           
-  Distance  /  (A_speed  +  Bird_speed)  *  B_speed;
                
// 记数
                num ++ ;
            }

            Console.WriteLine(num.ToString());
        }
    }
}
最后输出结果为:277,这跟电脑的精度有关。