作为我正在编写的脚本的子例程,我需要一个以特定模式运行的数字函数。它需要单个输入并提供单个输出,使得在0和L之间(包括0和L),它是标识函数,但是在L + 1和L * 2 + 1之间,它分别将L返回到0,然后从L *返回2 + 2到L * 3 + 2它分别返回0到L,依此类推。我想在没有任何if语句的情况下这样做,只使用绝对值和模数。任何人都可以给我这个函数的伪代码吗?
答案 0 :(得分:1)
给定输入I
,限制L
和结果R
,并且仅使用基本算术和绝对值,这会得到所需的结果。
R = ABS(L * ((I - (I % (L + 1))) / (L + 1) % 2) + (L + 1) * (I - (I % (L + 1))) / (L + 1) - I)
通过声明一些中间变量,并使用其他方法,例如,显然可以大大简化这一点。 floor
来模拟整数除法。这是一个Javascript示例:
var factor = Math.floor(input / (limit + 1));
var flag = factor % 2;
var result = Math.abs(limit * flag + (limit + 1) * factor - input)