Задачка. Написать условие пересечения двух интервалов, используя минимальное количество сравнений. Дабы не было всяких заумностей, сразу скажу, что известно, кто у интервала право, кто лево :)
windows-1251
Задачка. Написать условие пересечения двух интервалов, используя минимальное количество сравнений. Дабы не было всяких заумностей, сразу скажу, что известно, кто у интервала право, кто лево :)
Если 2 произвольных отрезка и не понятно кто в кого может «входить», то это четверной if
Пусть a1, a2 начало и конец первого интервала, а b1, b2 начало и конец второго. Тогда, если sign(b2-a1)!=sign(b1-a2), то интервалы пересекаются, где функция sign функция взятия знака у числа.
Без сравнений функция sign может быть приблизительно такой:
int sign(int i) {
return i & 0x080000000;
}
Машинный вариант я привел. Сдавайся. Одно сравнение это правильный ответ.
2) не равны не значит отличаются знаком
3) не отличаются знаком не означает равенства
4) сравнение чисел эквивалентно определению знака их разности
Кроме того, «где в вопросе сказано про машинную реализацию?»
Остальные пункты вообще не понятны.
математическое определение функции sign включает в себя сравнения. а твой вариант не работает даже для целых аргументов. ошибка в логике и не связана с реализацией. кто найдет ошибку - 5 в полугодии :) кстати, неплохая задачка для тестеров.
остальные пункты:
2 и 3: если не знашь значения слова
Как уже было написано выше, задача вообще не «про машинную реализацию», «человеческую» я написал, тоже в одно сравнение.
Нравится написание «ошибка в логике». Это у программы на C ошибка в логике что-ли? Кроме того (наверное это прозвучало не очень понятно), было написано фраза «приблизительно». Ни что не мешает написать шаблонный класс для любого типа числа, который, сюрприз правда, будет работать по сходному принципу (оставляю в качестве домашнего задания).
Каюсь, сформулировал не совсем четко. Так вот, повторюсь. Даже если для открытых отрезков твой способ и работает, для замкнутых он работать не будет. Что показывает его несовершенность по сравнению с общепринятым решением.
Термин «интервал» от «отрезка» отличаем, да?
Пример - пожалуйста. a1=a2=b1=b2.