如何包装一个连续的整数范围?

时间:2012-08-15 18:39:09

标签: math integer

在给定某个f(i, n, len, offset)的情况下,包含n(> = 0)长度为len的整数范围的最短可能计算offset是多少?

i   offset 0  offset 1  offset 2  offset 15
10  -> 10     -> 15     -> 14     -> 13
11  -> 11     -> 10     -> 15     -> 14
12  -> 12     -> 11     -> 10     -> 11
13  -> 13     -> 12     -> 11     -> 10
14  -> 14     -> 13     -> 12     -> 11
15  -> 15     -> 14     -> 13     -> 12

所以f(10, 10, 5, 1) = 15f(15, 10, 5, 1) = 14f(10, 10, 5, 2) = 14

负数或负偏移或超过0的范围的业力。

1 个答案:

答案 0 :(得分:1)

我不知道"最短的",但这似乎有效:

f(int n, int base, int len, int offset)
{ int r = n - offset;
  if (r < base)
    r += len;
  return r;
}

它确实需要添加base参数,因为否则你不知道n在哪个范围内(例如15-20范围底部的15或者10-15之上?)。因此,您的示例将变为f(10, 10, 6, 1)f(15, 10, 6, 1)等......

Haven未检查是否适用于负数和/或范围为0的情况,如果offset > len,它也会失败,但可以通过添加offset %= len来规范化输入参数。