t**i 发帖数: 314 | 1 1*n方格,n可以认为任意多,其中的两个上面有mark,2个robots,一个介于两mark的中
间某一方格上,另一个位于两mark的左边。
robot可执行三个动作:左移一步,右移一步,报告当前是否在mark上。
要求:写一个code sequence同时作用于2个robot上以保证他们肯定会相遇。
是我面试时的最后一道题,当时题目意思都没理解好被告知时间到了。这是根据我个人
的理解事后整理出来的,应该是这个意思。如果有见过这题的请补充一下或者指出我的
谬误之处。 |
g*********e 发帖数: 14401 | 2 当一个robot走到array边界处的时候你再让它往边上走是不是等于静止不动? |
p*****2 发帖数: 21240 | 3 要求:写一个code sequence同时作用于2个robot上以保证他们肯定会相遇。
一个sequence同时作用与两个robot怎么相遇呢?
比如往左都往左,往右都往右。不是永远不会相遇吗? |
p*****2 发帖数: 21240 | 4
1*n没法往上走。
【在 g*********e 的大作中提到】 : 当一个robot走到array边界处的时候你再让它往边上走是不是等于静止不动?
|
s*****e 发帖数: 16824 | 5 不知道是不是要求object-oriented?如果是,应该在class里设一个static 变量。如果
不是,也需要一个额外变量。
一开始的时候,让两个robot往左走,当其中一个碰到mark的时候,设置那个额外变量
为1,
然后没碰到mark的那个改成往右走,碰到的那个继续往左走。
【在 t**i 的大作中提到】 : 1*n方格,n可以认为任意多,其中的两个上面有mark,2个robots,一个介于两mark的中 : 间某一方格上,另一个位于两mark的左边。 : robot可执行三个动作:左移一步,右移一步,报告当前是否在mark上。 : 要求:写一个code sequence同时作用于2个robot上以保证他们肯定会相遇。 : 是我面试时的最后一道题,当时题目意思都没理解好被告知时间到了。这是根据我个人 : 的理解事后整理出来的,应该是这个意思。如果有见过这题的请补充一下或者指出我的 : 谬误之处。
|
h**********l 发帖数: 6342 | 6 都不用管mark的点,随便往一边走,碰到边界就掉头
一定可以相遇
不过题目给mark的点是不是说为了提前相遇的条件
【在 t**i 的大作中提到】 : 1*n方格,n可以认为任意多,其中的两个上面有mark,2个robots,一个介于两mark的中 : 间某一方格上,另一个位于两mark的左边。 : robot可执行三个动作:左移一步,右移一步,报告当前是否在mark上。 : 要求:写一个code sequence同时作用于2个robot上以保证他们肯定会相遇。 : 是我面试时的最后一道题,当时题目意思都没理解好被告知时间到了。这是根据我个人 : 的理解事后整理出来的,应该是这个意思。如果有见过这题的请补充一下或者指出我的 : 谬误之处。
|
q******1 发帖数: 310 | |
l*********8 发帖数: 4642 | 8 move to right for 1 step
move to left for 1*2+1 = 3 steps
move to right for 3*2+1 = 7 steps
.....
during the above processes moving to left, check if the robot is on the mark
. If yes, stay there (if the robot needs to keep moving, it can go one step
left and right again and again. |
t**i 发帖数: 314 | 9 能解释一下逻辑吗?
mark
step
【在 l*********8 的大作中提到】 : move to right for 1 step : move to left for 1*2+1 = 3 steps : move to right for 3*2+1 = 7 steps : ..... : during the above processes moving to left, check if the robot is on the mark : . If yes, stay there (if the robot needs to keep moving, it can go one step : left and right again and again.
|
t**i 发帖数: 314 | 10 没法检测是不是到边界啊
【在 h**********l 的大作中提到】 : 都不用管mark的点,随便往一边走,碰到边界就掉头 : 一定可以相遇 : 不过题目给mark的点是不是说为了提前相遇的条件
|
|
|
t**i 发帖数: 314 | 11 我的感觉是唯一可以是二者不同步的就是检测自己是不是在marker上。比如说
if(atMarker) moveLeft;
那么执行这条指令时在marker上的那个左移,不在marker上的不动。
不过如我前面说的,这个题我不明白,甚至不清楚我是否弄清楚了题意。当时是最后一
道题,来回了几下就说没有时间了。
【在 p*****2 的大作中提到】 : 要求:写一个code sequence同时作用于2个robot上以保证他们肯定会相遇。 : 一个sequence同时作用与两个robot怎么相遇呢? : 比如往左都往左,往右都往右。不是永远不会相遇吗?
|
l******c 发帖数: 2555 | 12 a little change from a very old msft interview question
"
A helicopter drops two trains, each on a parachute, onto a straight infinite railway line. There is an
undefined distance between the two trains. Each faces the same direction, and upon landing, the parachute
attached to each train falls to the ground next to the train and detaches. Each train has a microchip that
controls its motion. The chips are identical. There is no way for the trains to know where they are. You need
to write the code in the chip to make the trains bump into each other. Each line of code takes a single clock
cycle to execute. You can use the following commands (and only these); MF – moves the train forward MB –
moves the train backward IF (P) – conditional that is satisfied if the train is next to a parachute. There is no
“then” to this IF statement. GOTO"
You can use the following commands (and only these);
MF - moves the train forward
MB - moves the train backward
IF (P) - conditional that's satisfied if the train is next to a
parachute. There is no "then" to this IF statement.
GOTO
ANS.
A: MF
IF (P)
GOTO B
GOTO A
-----
B: MF
GOTO B
Explanation: The first line simply gets them off the parachutes. You
need to get the trains off their parachutes so the back train can find
the front train's parachute, creating a special condition that will allow
it to break out of the code they both have to follow initially. They
both loop through A: until the back train finds the front train's
parachute, at which point it goes to B: and gets stuck in that loop. The front
train still hasn't found a parachute, so it keeps in the A loop.
Because each line of code takes a "clock cycle" to execute, it takes longer
to execute the A loop than the B loop, therefore the back train (running
in the B loop) will catch up to the front train
【在 t**i 的大作中提到】 : 1*n方格,n可以认为任意多,其中的两个上面有mark,2个robots,一个介于两mark的中 : 间某一方格上,另一个位于两mark的左边。 : robot可执行三个动作:左移一步,右移一步,报告当前是否在mark上。 : 要求:写一个code sequence同时作用于2个robot上以保证他们肯定会相遇。 : 是我面试时的最后一道题,当时题目意思都没理解好被告知时间到了。这是根据我个人 : 的理解事后整理出来的,应该是这个意思。如果有见过这题的请补充一下或者指出我的 : 谬误之处。
|
e***l 发帖数: 710 | 13 就是写一段没有通讯的code,同时作用在两个obj上,最终实现某种同步。 |
e***l 发帖数: 710 | 14 这么操作:
n1=n2=1;
while(true){
探测初始位置左边第n1格
如果在左边遇到一个mark,跳出while,就停在那不动了。(这个肯定是右边的robot)
否则n1++;
探测初始位置右边第n2格
如果在右边遇到一个mark,n2就不增长了。(此时两个robot都有可能)
否则n2++
}
这么做的话在有限的时间内,右边的robot肯定会停在左边的mark上。而左边的robot会
永远往左探测,但是也会最终到达它右边的mark(左mark),并且间隔性地回到那里。所以两个
robot会在有限时间内相遇(在左边mark上) |
l*********8 发帖数: 4642 | 15 握手,跟我的想法一样
【在 e***l 的大作中提到】 : 这么操作: : n1=n2=1; : while(true){ : 探测初始位置左边第n1格 : 如果在左边遇到一个mark,跳出while,就停在那不动了。(这个肯定是右边的robot) : 否则n1++; : 探测初始位置右边第n2格 : 如果在右边遇到一个mark,n2就不增长了。(此时两个robot都有可能) : 否则n2++ : }
|