答与微博前端教主在吃饭时讨论到的一道"微软面试题"
来源:互联网 发布:mac软件更新 编辑:程序博客网 时间:2024/05/22 09:48
加引号是因为我不知道是否真是微软面试题。题目是这样的:
有一车在某无限长公路上行驶,其起始位置和单位时间内速度均为有限大整数(正负不确定), 现有一仪器,在每一时间单位内可以探测1次车是否在指定位置,求一方法能在有限时间内求出车的速度和初始位置。
答曰:
解此题目分为两个步骤,第一个步骤,探测到车一次
第二个步骤,求出车的速度和位移。
先解答第一步骤,
显然,假设车位移为s,速度为v,在时间t时车的位置必定为 s+v*t
现在我在时间t时,可以对<s,v>值做出一次猜测<x,y>,然后探测位置 x+y*t,若这个位置有车,则第一步骤得解,若这个位置无车,则必定说明猜测<x,y>是不正确的,即可以排除解<x,y>
所以现在我们要构造一个序列 <x(t),y(t)>,使得对于任意的<s,v>取值,总有有限大的t使得 <x(t),y(t)> 值为 <s,v>,此问题之几何意义为将平面中的所有点映射到一个序列,下面给出其中一种最容易编程实现的解。(吃饭时我说的是螺旋形映射,但是想来似乎不如菱形映射容易编程实现)
假设s与v绝对值之和为m,则m必定有限,现在可以用以下代码所示算法检测:
var t = 0;
for(var m = 0; m < Infinity; m++) {
for(var x = 0; x <= m; x++) {
var y = m - x;
if(check(x+y*(t++))) {
break;
}
if(check(x+(-y)*(t++))) {
break;
}
if(check((-x)+y*(t++))) {
break;
}
if(check((-x)+(-y)*(t++))) {
break;
}
}
}
//我知道你们看完代码肯定想揍我,没错,前面那一堆废话其实说的就是这么简单的事情......
第二个步骤,
因为第一步骤的假设<x,y>并非位置的必要条件,所以无法反过来得出探测命中车之后<s,v>必定为<x,y>。但是我们知道车的现在位置之后,可以车之速度为x,依0,1,-1,2,-2,3,-3......这样的序列依次猜测,第二次命中即可得到速度v。
由速度又可以算出初始位置s
from: http://www.cnblogs.com/winter-cn/archive/2012/07/08/2581790.html
- 答与微博前端教主在吃饭时讨论到的一道"微软面试题"
- 微软的一道面试题
- 微软的一道面试题
- 微软的一道面试题
- 一道微软的面试题
- 微软的一道面试题
- 一道被"坑"到的前端Javascript面试题
- 一道被"坑"到的前端Javascript面试题
- 一道微软面试题
- 一道微软面试题
- 微软一道面试题
- 一道微软面试题
- 一道微软面试题
- 一道微软面试题
- 微软一道面试题
- 微软的一道面试题的解法
- 一道前端面试题
- 一道前端面试题
- 递归应用----指向整型数据的指针变量对输入的3个整数按从小到大排序
- yum搭建lnmp环境(CentOS6.5)
- 将二叉树按中序遍历转换成双向链表
- gedit写Makefile出现Makefile:16: *** missing separator. Stop
- ImportError: No module named MySQLdb 解决方案
- 答与微博前端教主在吃饭时讨论到的一道"微软面试题"
- CSS选择器
- 用Redis存储Tomcat集群的Session
- 字符编码那点事儿
- JavaWeb学习总结(一)——JavaWeb开发入门
- 360项目总结01
- 面试时算法题的解答思路
- UEditor1.3.6图片上传
- asp.net WebPages 速记1