2

给定一定的长度,包含从 (>=0)f(i, n, len, offset)开始的整数范围的最短可能计算是什么?nlenoffset

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) = 15_f(15, 10, 5, 1) = 14f(10, 10, 5, 2) = 14

负数或负偏移量或跨 0 范围的奖励业力。

4

1 回答 1

1

我不知道“最短的可能”,但这似乎有效:

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

但是,它确实需要添加base参数,因为否则您不知道n相对于范围的位置(例如,15 在 15-20 范围的底部还是 10-15 的顶部?)。所以你的例子会变成f(10, 10, 6, 1), f(15, 10, 6, 1), 等等...

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

于 2012-08-15T18:49:23.853 回答