关于一道面试题
今天早上看博客发现有两个朋友分别对一道面试做了讨论,我很感兴趣,所以也凑个热闹。
今天碰到一道比较有趣的面试题,大家来探讨一下。
有感于--"今天碰到一道比较有趣的面试题,大家来探讨一下。"
原题:
甲乙两地相距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,这跟电脑的精度有关。
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());
}
}
}