1

我在一个集合中有 N 个项目,我从 1 开始分配值,在列表的“中心”下降到 0,然后线性返回到 1。

因此,如果您有 5 个项目:

0   1   2   3   4
1   0.5 0   0.5 1

对于 6 个项目,中心的 2 个项目将具有相同的值 0。

0   1   2   3   4   5
1   0.5 0   0   0.5 1

现在我有一堆 if 语句检查index然后决定值应该从 1 上升还是下降。但这似乎太混乱了。

有没有一种优雅的方法来创建这样的一系列数字(特别是如果可能的话没有 if 语句)?

4

1 回答 1

5

如果N >= 3是奇数,那么

f(x) = fabs(2*x-N+1)/(N-1)

如果N >= 4是偶数,那么

f(x) = (fabs(2*x-N+1) - 1)/(N-2)

要完全摆脱 if 语句,您可以将其写为

f(x) = (fabs(2*x-N+1) + (N%2) - 1)/(N-2 + (N%2))

它适用于 的偶数和奇数值N >= 3

于 2012-12-13T21:42:58.993 回答