Задать вопрос
@Wizz4272

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

Предположим у нас есть 6 диапазонов:
1(-∞;49)
2(50;59)
3(60;69)
4(70;79)
5(80;89)
6(90;+∞)
Вводим число с клавиатуры и код выводит номер диапазона.
Как это сделать без длинной цепочки из if else?
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
Alexandroppolus
@Alexandroppolus
кодир
запихнуть нижние границы (начиная с 50) в массив и обойти его циклом, пока очередная нижняя граница не станет меньше или равна числу.
кстати, если бы диапазонов было не 6, а дохренища, то лучше бинпоиском.
Ответ написан
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;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
maaGames
@maaGames
Погроммирую программы
Так вопрос в том, чтобы не не было цепоки if else if else if else if else... или чтобы вообще не было if в программе? Если это не извращенская "учебная" задача, то ответ уже дали выше: цикл по массиву диапазонов и один единственный if внутри цикла.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
В данном случае нам повезло что есть линейная зависимость между номером отрезка и числом. Но бывают более ужасные случаи когда длины отрезков отличаются на много порядков (типичная ситуация для geo-spatial запросов) и тогда строят специальные структуры данныех которые делят пространство на прямоугольники (для 2д случая) такие как Q-Tree , R-Tree и далее ищут рекурсивным спуском по таким деревьям. Для одномерного случая (отрезки) алгоритм будет - тот-же самый. Только вместо прямоугольников другие отрезки или точки которые делят пространство. Эвристика будет лишь в выборе самого алгоритма.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы