计算较少的跳数C#

时间:2016-04-19 06:58:31

标签: c#

早上好:)我正在研究C#,我想编写一个代码,可以计算从任意点到特定点的跳数较少,如图所示

click here to show the picture

我有从1到12的分数,所以如果我想计算从12点到1点的较少跳数,逆时针方向的顺序为11,而顺时针方向为11。 另一个澄清我的问题的例子,如果我想计算从11点到4点的跳数较少,则逆时针方向为5,顺时针方向为6跳。注意:点数可以是奇数。 我希望你理解我的问题..

5 个答案:

答案 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 
  1. 添加总和
    如果小于12> 1 + 8 = 9 其他子

  2. 减去12 -9 = 3

  3. 将9与3进行比较,较小的值将是答案。