您的位置:首页 > 职场人生

有感于--"今天碰到一道比较有趣的面试题,大家来探讨一下。"

2009-04-29 00:28 405 查看
哈哈,来凑个热闹了。。。欢迎来踩。。。

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

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

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

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

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

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

Code

class 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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐