按循环顺序查找最接近数字的路径



我试图找到一个可以按循环顺序排列的数字的最接近路径,例如:

  • 我有数字0到4,它们可以双向(4之后是0,0之前是4(
  • 如果我目前处于1,并且我想进入2,那么最接近的路径将是前进
  • 如果我目前处于3,并且我想转到0,那么最接近的路径将是前进
  • 如果我目前处于2,并且我想转到1,那么最接近的路径将是向后走

在前一两个例子之后,这可能已经足够清楚了。

我想在代码中实现类似的东西,我可以用几个if等很容易地做到这一点,但我很确定肯定有一种更好、更容易的方法来使用数学来确定最接近的路径,但我真的不确定如何实现,如果有人能帮助解决这个问题,那将非常有用,

使用模运算,您可以定义一个函数来计算向前距离,另一个函数用于计算向后距离,第三个函数用于在两者之间做出决定。这里有一个python解决方案,应该可以很容易地翻译成其他语言(尽管不同的语言处理mod运算符如何处理负数,所以可能需要注意(:

def forward(i,j,n):
return (j-i) % n
def backwards(i,j,n):
return (i-j) % n
def best_direction(i,j,n):
f = forward(i,j,n)
b = backwards(i,j,n)
if f < b:
return 'forward'
elif b < f:
return 'backwards'
else:
return 'either'

您的测试用例(在Python外壳中运行(:

>>> best_direction(1,2,5)
'forward'
>>> best_direction(3,0,5)
'forward'
>>> best_direction(2,1,5)
'backwards'

另一个测试案例,显示了平局的可能性:

>>> best_direction(3,0,6)
'either'

显然,如果需要的话,可以将两个单行函数内联到best_direction的定义中,将其简化为一个函数定义。

最新更新