如何通过编程来确定n在这个序列中的位置

How to programmatically identify where n would fit in this sequence?

本文关键字:位置 编程 何通过      更新时间:2023-09-26

我有一个数字,我想要符合以下序列中最接近的值:

2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42...

如果10通过,则变为12, 13变为15, 17变为19

我如何在函数中实现这个?

如果您不知道数组是否排序,您可以使用下面的代码来查找数组中最接近传入值(更高或更低)的值:

var list = [2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42];
function findClosestValue(n, list) {
    var delta, index, test;
    for (var i = 0, len = list.length; i < len; i++) {
        test = Math.abs(list[i] - n);
        if ((delta === undefined) || (test < delta)) {
            delta = test;
            index = i;
        }
    }
    return(list[index]);
}

如果您想要最接近的数字而不重复,并且数组已排序,您可以使用以下代码:

var list = [2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42];
function findClosestValue(n, list) {
    var delta, index;
    for (var i = 0, len = list.length; i < len; i++) {
        delta = n - list[i];
        if (delta < 0) {
            return(index ? list[index] : undefined);
        }
        index = i;
    }
    return(list[index]);
}

这是一个jsFiddle的解决方案,适用于无限系列的组合"+3+4+3+3+4+3+3+4+3+3+4....."这似乎是你的系列。http://jsfiddle.net/9Gu9P/1/希望这对你有帮助!

更新:

看了你的答案后,我注意到你说你想要序列中的闭合数,但你的例子都去序列中的下一个数字,无论它是否与前一个数字最接近,所以这里是另一个jsfiddle,考虑到这一点,所以你可以选择你想要的那个:)。

http://jsfiddle.net/9Gu9P/2/

function nextInSequence(x){
    //sequence=2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42
    var i= x%10;
    switch(i){
        case 2:case 5:case 9: return x;
        case 0:case 1: return x+ 2-i;
        case 3:case 4: return x+5-i;
        default: return x+9-i;
    }
}

警报(nextInSequence (10))