在给定某个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) = 15
,f(15, 10, 5, 1) = 14
和f(10, 10, 5, 2) = 14
。
负数或负偏移或超过0的范围的业力。
答案 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
来规范化输入参数。