如何找到N no的最接近值。进入序列?

时间:2018-01-05 03:17:31

标签: javascript math

我有一个整数序列列表:

[10,15,30,45,60,75,90 ...... N * 15]

让我们说你有一个值,即33 我应该做什么计算才能在上面的序列中找到最接近的值33? (JavaScript的) 我们可以在没有循环的情况下找到它吗?

感谢。

2 个答案:

答案 0 :(得分:1)

正如其他人已经指出的那样,如果你使用15的倍数(假设序列以10开头是错误的),那么你可以简单地执行以下操作:

var interval = 15;
var value = 33;

var closest = Math.round(value / interval) * interval;
console.log(closest);

答案 1 :(得分:0)

你没有指定任何语言,所以这里有一些伪代码。此外,我假设序列实际上是15*n,并且必须有0而不是10作为第一个元素。假设序列形式为015*N,测试值为test。恕我直言,最简单的算法如下:

if(test <= 0) 
      return 0
else if (test >= 15*N)
      return 15*N
else {
   lower = Math.floor(test/15)
   upper = lower + 1
   lowerDif = test - 15*lower
   upperDif = 15*upper - test
   if (lowerDif < upperDif) 
      return 15*lower
   else
      return 15*upper
}

您的想法是,您需要检查test是否在[0; 15*N]范围内。如果否 - 返回边界,否则检查索引Math.floor(test/15)Math.floor(test/15) + 1处的两个值。确实

    Math.floor(test/15) <= test < Math.floor(test/15) + 1

所以答案就越接近。