• Как написать код, где надо узнать в каком диапазоне число(без if else)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В данном случае нам повезло что есть линейная зависимость между номером отрезка и числом. Но бывают более ужасные случаи когда длины отрезков отличаются на много порядков (типичная ситуация для geo-spatial запросов) и тогда строят специальные структуры данныех которые делят пространство на прямоугольники (для 2д случая) такие как Q-Tree , R-Tree и далее ищут рекурсивным спуском по таким деревьям. Для одномерного случая (отрезки) алгоритм будет - тот-же самый. Только вместо прямоугольников другие отрезки или точки которые делят пространство. Эвристика будет лишь в выборе самого алгоритма.
    Ответ написан
    Комментировать
  • Как написать код, где надо узнать в каком диапазоне число(без if else)?

    maaGames
    @maaGames
    Погроммирую программы
    Так вопрос в том, чтобы не не было цепоки if else if else if else if else... или чтобы вообще не было if в программе? Если это не извращенская "учебная" задача, то ответ уже дали выше: цикл по массиву диапазонов и один единственный if внутри цикла.
    Ответ написан
    1 комментарий
  • Как написать код, где надо узнать в каком диапазоне число(без if else)?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    По-скольку тут все диапазоны одинаковой длины, то можно формулой:

    n = (x - 30)/10;

    Тут есть проблема, что интервалы идут и после 6 и еще и в отрицательную сторону.

    Можно навесить на это сверху min/max так:

    min(6, max(1, n));

    Min и max реализуются без if - это известная задача, гуглите.

    Edit: Сначала не опнял вопрос, думал надо по заданию без if написать это.

    Все-равно, самый быстрый и простой код будет с формулой выше. Только можно проверить на принадлежность крайним интервалом через if:

    if (x <= 49) return 1;
    if (x >= 90) return 6;
    return (x-50)/10 + 2;
    Ответ написан
    Комментировать
  • Как написать код, где надо узнать в каком диапазоне число(без if else)?

    Alexandroppolus
    @Alexandroppolus
    кодир
    запихнуть нижние границы (начиная с 50) в массив и обойти его циклом, пока очередная нижняя граница не станет меньше или равна числу.
    кстати, если бы диапазонов было не 6, а дохренища, то лучше бинпоиском.
    Ответ написан
    3 комментария