2012-12-13 30 views
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语句,如果可能的话)?

回答

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的偶数和奇数值。

+0

谢谢你,你是一个天才。 –

相关问题