有感于--"今天碰到一道比较有趣的面试题,大家来探讨一下。"
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;
}
}
根据“今天碰到一道比较有趣的面试题,大家来探讨一下”的文章,稍微做了一下,没想到这么简单的东西竟花了我一个小时。
不够在做的过程中,却给了我另外一个思路,大家知道,这道题是用递归算法来做的,而递归肯定会需要一个终点值,或者更准确的
说是让递归结束的条件。而在这题中,有可能会有两种这样的结束条件。
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;
}
}
相关文章推荐
- 今天碰到一道比较有趣的面试题,大家来探讨一下。
- 今天碰到一道比较有趣的面试题,大家来探讨一下。
- 一道很好玩的OOP面试题,今天比较有空,所有做了一下
- 那天在CSDN上看到一个网友在华为遇到的面试题是一道乘法题看似简其实并不是因为它们都超出了数据类型的范围,今天做了下加法希望对大家有所启示
- 今天做到一道面试题:请介绍一下单例模式
- 朋友今天问我一个面试题,我看了看,给大家分享一下
- 看到的一道面试题,很有趣,与大家分享zt
- 华为的linux面试题,知道怎么做的评论一下,大家探讨。
- 朋友今天问我一个面试题,我看了看,给大家分享一下
- 朋友今天问我一个面试题,我看了看,给大家分享一下
- 看到的面试题,请容我一道一道的解析(假以时日),希望大家留言一起探讨~
- 今天面试笔试了一道SQL面试题,狠简单
- 一道有趣的面试题
- 闲来无事做,把最近碰到的一些小面试题整理一下,单例模式,冒泡排序,递归
- 和大家一起了解一下"深圳"
- 今天陪女朋友逛街花了一块钱,好心疼啊!(转贴 大家开心一下!谁信,谁傻)
- 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
- 今天需要简单比较一下Mule与JBoss ESB的服务功能
- 给大家分享一下我经历的Unix C面试题【转】
- 公司线上的 MySQL 慢日志,之前一直没有做好监控。趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下。 针对脚本的注解和整体构思,我会放到脚本之后为大家