| | #include <iostream>
// Функция проверяет пересечение диапазонов [a, b) и [c, d)
// Диапазоны полуоткрытые: включают начало, исключают конец
bool rangesIntersect(int a, int b, int c, int d) {
// Два диапазона пересекаются, если:
// начало первого < конец второго И начало второго < конец первого
return (a < d) && (c < b);
}
// Альтернативный вариант - проверка через условие НЕ пересечения
// (может быть более интуитивным)
bool rangesIntersect_v2(int a, int b, int c, int d) {
// Диапазоны НЕ пересекаются, если:
// один диапазон полностью левее другого
if (b <= c || d <= a) {
return false; // не пересекаются
}
return true; // пересекаются
}
int main() {
// Тестовые примеры
// [1, 5) и [3, 7) - пересекаются в [3, 5)
int res1 = rangesIntersect(1, 5, 3, 7);
std::cout << "[1, 5) и [3, 7): " << (res1 ? "пересекаются" : "не пересекаются") << std::endl;
// [1, 3) и [3, 5) - не пересекаются (смежные диапазоны)
int res2 = rangesIntersect(1, 3, 3, 5);
std::cout << "[1, 3) и [3, 5): " << (res2 ? "пересекаются" : "не пересекаются") << std::endl;
// [1, 5) и [1, 5) - пересекаются (совпадают полностью)
int res3 = rangesIntersect(1, 5, 1, 5);
std::cout << "[1, 5) и [1, 5): " << (res3 ? "пересекаются" : "не пересекаются") << std::endl;
// [1, 5) и [6, 10) - не пересекаются (отдельные диапазоны)
int res4 = rangesIntersect(1, 5, 6, 10);
std::cout << "[1, 5) и [6, 10): " << (res4 ? "пересекаются" : "не пересекаются") << std::endl;
// [3, 8) и [2, 4) - пересекаются в [3, 4)
int res5 = rangesIntersect(3, 8, 2, 4);
std::cout << "[3, 8) и [2, 4): " << (res5 ? "пересекаются" : "не пересекаются") << std::endl;
return 0;
}
|