【问题标题】:Position search algorithm位置搜索算法
【发布时间】:2014-11-10 10:32:01
【问题描述】:

我希望能够将鼓定位在某个位置,但以游乐园摩天轮为例可能会更好。我确定这个搜索方法有名字吗?

一个有 100 把椅子的摩天轮在旋转,它随机停下来,90 号椅子在底部,所有乘客都下车。现在,如果我想将 10 号椅子带到地面,以便 10 号椅子上的乘客可以下车,是否有一种算法可以帮助我计算到 10 号椅子的最短距离,它将以正确的方向旋转摩天轮最少计数到第 10 位椅子的次数?

【问题讨论】:

标签: algorithm language-agnostic


【解决方案1】:

假设椅子按顺时针编号,N 是椅子的数量(在您的示例中为100

另外,设stopped 是椅子的编号,轮子停止的位置。

desired 是您想要到达的椅子的编号。

所以,算法如下:

int distClockwise = desired - stopped;
if(distClockwise < 0) {
    distClockwise += N;
}

int distCounterClockwise = N - distClockwise;

if(distClockwise < distCounterClockwise) {
    //spin the wheel clockwise
}
else {
    //spin the wheel counterclockwise   
}

【讨论】:

  • 这段代码几乎记录了它本身,但为了清楚起见:这里的想法是计算两个方向需要多远才能到达所需的椅子,然后选择最短的方向。
  • 感谢大家的 cmets 和链接。 GoogleHireMe,你的正确,正如 Kaganar 所写,“这里的想法是计算两个方向需要多远才能到达所需的椅子,然后选择最短的方向”。正如它所写的那样,您的代码不适用于所有可能的位置,它似乎得到了正确的距离,(它需要移动多少椅子),但不是方向。
  • 有没有人计算出适用于所有组合的数学方程?我有点在那里,但很挣扎。
  • @martin 是正确的,Kaganar 没有说什么不正确 - 他只是在我的答案中添加了一些细节(由于变量名称,这很明显)。
  • @martin 另外,如果您知道(用上面的等式计算) distClockwise(顺时针移动以到达我们想要的目的地的椅子数量)大于逆时针距离(distCounterClockwise 在上面的代码),那么,显然,你应该逆时针旋转轮子,反之亦然。
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多