早上好:)我正在研究C#,我想编写一个代码,可以计算从任意点到特定点的跳数较少,如图所示
click here to show the picture
我有从1到12的分数,所以如果我想计算从12点到1点的较少跳数,逆时针方向的顺序为11,而顺时针方向为11。 另一个澄清我的问题的例子,如果我想计算从11点到4点的跳数较少,则逆时针方向为5,顺时针方向为6跳。注意:点数可以是奇数。 我希望你理解我的问题..
答案 0 :(得分:4)
顺时针 ,逆时针并最小:
private static int Hops(int a, int b) {
return Math.Min((12 + a - b) % 12, (12 + b - a) % 12);
}
试验:
// 5
Console.WriteLine(Hops(11, 4));
// 1
Console.WriteLine(Hops(12, 1));
编辑:正如Matthew Watson在评论中提到的那样,您可能想知道它是顺时针还是逆时针:
private static int ClockwiseHops(int a, int b) {
return (12 + b - a) % 12;
}
private static int AntiClockwiseHops(int a, int b) {
return (12 + a - b) % 12;
}
private static int Hops(int a, int b) {
return Math.Min(ClockwiseHops(a, b), AntiClockwiseHops(a, b));
}
private static String Solve(int a, int b) {
int hops = Hops(a, b);
if (hops == ClockwiseHops(a, b))
return String.Format("{0} -> {1} (clockwise) {2} hops", a, b, hops);
else
return String.Format("{1} -> {0} (anticlockwise) {2} hops", a, b, hops);
}
试验:
// 12 -> 1 (clockwise) 1 hops
Console.WriteLine(Solve(12, 1));
// 11 -> 4 (clockwise) 5 hops
Console.WriteLine(Solve(11, 4));
答案 1 :(得分:3)
您是否考虑过%
模运算符?这将为您提供第一个数字的剩余部分除以第二个数字。例如:
6 % 3 = 0
(3进入6正好两次,所以零剩余)
10 % 4 = 2
(4次进入10次,其余为2次)
因此,您需要尝试两条路线,然后检查哪条路线较小。
所以试试:
int numberOfPositions = 12;
Math.Min ((numberOfPositions + b - a) % numberOfPositions, (numberOfPositions + a -b) % numberOfPositions);
如果您想了解模数计算是如何工作的,那么这里有一个在线计算器: http://www.miniwebtool.com/modulo-calculator/
答案 2 :(得分:0)
这很简单吗?
int NUM_OF_NODES = 12;
int numOfHops = NUM_OF_NODES;
int point1 = 11;
int point2 = 4;
int path1 = Math.Abs(point1 - point2);
int path2 = numOfHops - path1;
int result = path1 < path2 ? path1 : path2;
return result;
简单功能
public int getLeastPath(int point1, int point2)
{
int path1 = Math.Abs(point1 - point2);
int path2 = NUM_OF_NODES - path1;
return path1 < path2 ? path1 : path2;
}
答案 3 :(得分:0)
已经提供了最简单的答案,但这里是一个递归函数,实际上是从一个数字“跳”到另一个数字:
Func<int, int, int, int> Hop = null;
Hop = (direction, start, end) =>
{
if (start < 1)
start = 12;
if (start != end)
return 1 + Hop(direction, (start + direction), end);
return 0;
};
答案 4 :(得分:0)
EX:11-8
1.获取第一个数字和最后一个数字的mod 11%12 = 1
8 % 12 = 8
添加总和
如果小于12> 1 + 8 = 9
其他子
减去12 -9 = 3
将9与3进行比较,较小的值将是答案。