Алгоритм - Расчет значений надрезов на диапазоне

0

Учитывая эти входы: начало, конец, количество выемок

start = a number;
end = a larger number;
numberOfNotches = a number; // includes start and end values

Как рассчитать промежуточные значения в диапазоне для отображения?

Пример:

start = 100;
end = 200;
numberOfNotches = 6; // includes start and end values

Вывод:

100 ----- 120 ----- 140 ----- 160 ----- 180 ----- 200 

Вот что я имею в JavaScript

function getNotchValues(from, to, numberOfNotches){
    var step = Math.floor( ( (to - from) / (numberOfNotches-2) ));

    from = Math.floor(from/step)*step;
    to = Math.ceil(to/step)*step;
    var arr = [];
    for(var i=from; i<=to; i=i+step){
        arr.push(i);
    }
    return arr;
}

Вот логика, которой я до сих пор, но это не работает для меня: http://jsfiddle.net/w8vwG/

Теги:
algorithm
range

1 ответ

1
Лучший ответ

Похож на проблему " один за другим"/fencepost. Появляется, чтобы работать нормально с одним небольшим изменением:

(numberOfNotches-1)

В этой строке:

var step = Math.floor( ( (to - from) / (numberOfNotches-1) ));

Редактировать:

Я думаю, что это полное решение, рассматривающее проблему в моем комментарии ниже:

http://jsfiddle.net/RKx87/

function getNotchValues(from, to, numberOfNotches) {
    var step = Math.floor(((to - from) / (numberOfNotches - 1)));

    var arr = [];
    for (var i = from; i <= to; i = i + step) {
        arr.push(i);
    }
    arr[arr.length - 1] = to
    return arr;
}
  • 0
    Спасибо за помощь
  • 0
    Хм, похоже, что теперь это работает, пока to - from равномерно делится на numberOfNotches - 1 . Вы можете приблизить его, не округляя шаг, а округляя позже. Это может сделать вас в конечном итоге один на последнем элементе, хотя.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню