哈哈,来凑个热闹了。。。欢迎来踩。。。

 根据“今天碰到一道比较有趣的面试题,大家来探讨一下”的文章,稍微做了一下,没想到这么简单的东西竟花了我一个小时。

不够在做的过程中,却给了我另外一个思路,大家知道,这道题是用递归算法来做的,而递归肯定会需要一个终点值,或者更准确的

说是让递归结束的条件。而在这题中,有可能会有两种这样的结束条件。

  1).  两车的距离小于多少时相当于两车相遇了  (单位公里)

  2) . 小鸟在两车之间单向飞行的时间小于多少时间时相当于两车相遇了(单位 小时)

因此会有两种解法,一种是根据相距距离来进行递归,一种是根据小鸟飞行时间进行递归

 

 

 

 Program
    {
        static void Main(string[] args)
        {
            
double exactDistance = 0.000000001;
            
double exactTime = 0.00000001;
            Console.WriteLine(
"if Distance: ");
            Console.WriteLine(birdRunUseDistance(exactDistance).ToString());
            Console.WriteLine(
"if Time: ");
            Console.WriteLine(birdRunUseDistance(exactTime).ToString());
            Console.ReadKey();
         }
       
/// <summary>
       
/// 根据距离
       
/// </summary>
       
/// <param name="exactDistance">当两车正面距离小于多少时相当于两车相遇</param>
       
/// <returns></returns>
        static int birdRunUseDistance(double exactDistance)
        {
            
int times = 0;
            
int Ta = 15;  //车A速
            int Tb = 20//车B速
            int bird = 30;  //鸟速
            double Length = 1000;   //初始两地距离       
            bool p = true//方向  甲到已为true 相反则为false;
            while (Length > exactDistance)
            {               
                
double t = 0;               
                
if (p)
                {                    
                      t 
= Length / (Tb + bird);
                }
                
else
                {
                      t 
= Length / (Ta + bird);
                }
              
                Length 
= Length - t * (Ta + Tb);
                p 
= !p;
                times 
= times + 1;
                 
          } 
              
                
return times;
          }


        
/// <summary>
        
/// 根椐时间
        
/// </summary>
        
/// <param name="exactTime">时间精度(当小鸟在两车之间单程飞行的时间小于多少时就相当于两车相遇了)</param>
        
/// <returns></returns>
        static int birdRunUseTimes(double exactTime)
        {
            
int times = 0;
            
int Ta = 15;  //车A速
            int Tb = 20//车B速
            int bird = 30;  //鸟速
            double Length = 1000;   //初始两地距离       
            bool p = true//方向  甲到已为true 相反则为false;
            double totalTime=Length/(Ta+Tb); 
            
double birdFlyTotalTime = 0;
            
while ((totalTime - birdFlyTotalTime) > exactTime)
            {
                
double t = 0;
                
if (p)
                {
                    t 
= Length / (Tb + bird);
                }
                
else
                {
                    t 
= Length / (Ta + bird);
                }

                birdFlyTotalTime 
= birdFlyTotalTime + t;
                p 
= !p;
                times 
= times + 1
            }
            
return times;
        }
    }

相关文章:

  • 2021-08-16
  • 2022-02-02
  • 2021-06-11
  • 2022-02-25
  • 2021-12-04
  • 2021-09-15
猜你喜欢
  • 2021-07-27
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
  • 2022-01-22
  • 2021-07-02
相关资源
相似解决方案