Algorithm 无限长直线上的两个机器人

Algorithm 无限长直线上的两个机器人,algorithm,Algorithm,这与“降落伞机器人”拼图有点不同。有两个机器人悬在一条无限长的线上。它们之间的距离不是相对的,因此它们之间的距离是5米还是5公里并不重要。假设您需要为两个机器人编程,以便在磁铁处会合,您唯一的选择是: 向左走一步 向右移一步 向左走两步 向右移两步 停下来检查机器人是否在磁铁上 机器人不会知道磁铁旁边是否已经有磁铁,移动一个机器人也会使另一个机器人朝同一方向移动。制定两个机器人在磁铁处相遇的算法 我无法制定出这个问题的解决方案,这个难题有解决方案吗?我认为两个机器人可以运行相同的程序: va

这与“降落伞机器人”拼图有点不同。有两个机器人悬在一条无限长的线上。它们之间的距离不是相对的,因此它们之间的距离是5米还是5公里并不重要。假设您需要为两个机器人编程,以便在磁铁处会合,您唯一的选择是:

  • 向左走一步
  • 向右移一步
  • 向左走两步
  • 向右移两步
  • 停下来检查机器人是否在磁铁上
机器人不会知道磁铁旁边是否已经有磁铁,移动一个机器人也会使另一个机器人朝同一方向移动。制定两个机器人在磁铁处相遇的算法


我无法制定出这个问题的解决方案,这个难题有解决方案吗?

我认为两个机器人可以运行相同的程序:

var steps = 10, count = 10, left = true;
while (!isRobotOnMagnet()) {
    if (count-- > 0)
        if (left)
            oneMoveLeft();
        else
            oneMoveRight();
    else {
        steps *= 2;
        left = !left;
        count = steps;
    }
}

这不是最优雅的表述方式,还有改进的余地。想法是向左走几步,然后向右翻倍,然后再向左翻倍,依此类推。。。你最终会找到磁铁。

如果它们总是朝同一个方向移动,它们怎么会相遇?这难道不意味着他们的初始距离被保留了吗?@NicoSchertler这就是被要求的,我也被这个问题弄糊涂了是的,这是正确的,机器人可以运行相同的程序,机器人将如何在磁铁上相遇?只有一个机器人会碰它,但不是两个都碰你的答案对吗?不,最终两个机器人都会停在磁铁上,因为当机器人停在磁铁上时,另一个机器人会继续运行。它们运行相同的程序,但各自在自己的计算机上运行。另一个将继续运行,直到它到达磁铁?磁铁旁边的另一个机器人会动吗?