我有一个由SW编号的8个罗盘点阵列,从顺时针方向到S:
2 3 4
1 5
0 7 6
我想计算从一个点到另一个点的最短路线是顺时针(+1)还是逆时针(-1)。例如。从7到5将是-1,从7到0将是+ 1。
我想这个简单的问题,但今天我的大脑已经冻结了。
我得到的最接近的是if abs(start - end) < 4, -1, 1
,但如果开头为3则不起作用。
有一个类似的问题here,接受的答案是使用模数,但不解释如何。我没有成功地抛出各种计算。
答案 0 :(得分:8)
不是使用abs
,而是添加8
(条目数),然后采用模8
,如下所示:
enum Direction {
None, Clockwise, Counterclockwise
}
public static Direction GetDirection(int a, int b) {
if (a == b) {
return Direction.None;
}
return (a-b+8)%8 > 4 ? Direction.Clockwise : Direction.Counterclockwise;
}
添加8
使得差异非负;模数 - 8
将其带入0
... 7
范围。
请注意,当步数为4
时,无论您走哪条都没关系,因此程序更喜欢逆时针方向。您可以使用>=
代替>
来更改它。
答案 1 :(得分:0)
试试这个
int start=3;
int end=6;
var temp = start-end;
temp= temp < 0 ? temp + 7 : temp;
var result = temp < 4 ? -1 : 1;