- 主题:一道谷歌面试题
不考虑负的话,从0往前遍历,间隔是2,就一定能在第k+1枪命中蚂蚁,k是蚂蚁初始位置。
【 在 stub 的大作中提到: 】
: 有一个无限长的整数刻度的坐标轴,有一只蚂蚁在某一个整数刻度上,但是具体位置未知,现在蚂蚁每秒钟都会向正方向前进一格。你有一把手枪,每秒钟你能向坐标轴的某个刻度开一枪,之后只能知道打中还是没打中,请你设计一种开枪的策略,保证最终一定能打中这只蚂蚁。
--
修改:wangychf FROM 159.226.100.*
FROM 159.226.100.*
考虑负方向的话,是两个数列,正向数列是每间隔3打一枪,往回+1打一枪。会在2k的位置击中蚂蚁,这里的k是距离的绝对值。
举例来说,从0开始打,然后打1,3,2,6,3,9,4,12,5,15,...
【 在 wangychf 的大作中提到: 】
: 不考虑负的话,从0往前遍历,间隔是2,就一定能在第k枪命中蚂蚁,k是蚂蚁初始位置。
:
--
FROM 159.226.100.*
说白了就是第2n+1枪打3n,保证在2k+1能追到打到正向的蚂蚁;第2n枪打n就可以了,保证在2k+2处打到负向跟上来的蚂蚁。
起点是0,k是蚂蚁的起始距离。
【 在 wangychf 的大作中提到: 】
: 考虑负方向的话,是两个数列,正向数列是每间隔3打一枪,往回+1打一枪。会在2k的位置击中蚂蚁,这里的k是距离的绝对值。
: 举例来说,从0开始打,然后打1,3,2,6,3,9,4,12,5,15,...
: :
--
修改:wangychf FROM 159.226.100.*
FROM 159.226.100.*
其实从那点打也没有关系,假设起始位置是a,只要减去a就可以了。
第一枪,0+a
第二枪,1+a
第三枪,3+a
第四枪,2+a
第五枪,6+a
第六枪,3+a
.
.
.
其实是两个数列的合并。
也可以按照4k间隔打,但那样打的枪数更多。
【 在 wangychf 的大作中提到: 】
: 说白了就是第2k+1枪打3k;第2k枪打k就可以了。
: 起点是0,k是蚂蚁的起始距离。
--
修改:wangychf FROM 159.226.100.*
FROM 159.226.100.*
牛,算了半天和您这个一样。
还是您简洁、优美
【 在 dilemma 的大作中提到: 】
: 第2n次,打n
: 第2n+1次,打3n
:
--
FROM 159.226.100.*
没理解n的意思。
【 在 anetwork 的大作中提到: 】
: 假设n从0算起,蚂蚁如果初始在1正好被跳过了,需要开始在0点连打2枪补救这情况
--
FROM 221.218.203.*