Первая строка входных данных содержит четыре целых числа
Вторая строка содержит четыре целых числа
Выведите “Yes”, если заданные прямоугольники имеют хотя бы одну общую точку, и “No” в противном случае. Есть такой код
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int matchesCount = 0;
int[] angle = new int[4];
int[] angle2 = new int[4];
boolean[] secondMatches = new boolean[angle2.length];
for (int i = 0; i < secondMatches.length; i++) {
secondMatches[i] = false;
}
for (int i = 0; i < angle.length; i++) {
angle[i] = in.nextInt();
}
for (int j = 0; j < angle2.length; j++) {
angle2[j] = in.nextInt();
}
for (int firstElement : angle) {
for (int i = 0; i < angle2.length; i++) {
if (firstElement < 0) {
firstElement = 0;
}
{
if (firstElement == angle2[i]) {
if (angle2[i] < 0) {
angle2[i] = 0;
}
{
if (!secondMatches[i]) {
secondMatches[i] = true;
matchesCount++;
}
break;
}
}
}
}
}
if (matchesCount >= 1) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
Проходит все тесты с открытыми значениями, с закрытыми где-то выдает не правильный ответ.
Условие задачи: На плоскости даны два прямоугольника. Стороны прямоугольников параллельны осям координат (то есть стороны либо горизонтальны, либо вертикальны). В этой задаче прямоугольник — это граница прямоугольника и его внутренность. Каждый прямоугольник задан координатами двух противоположных вершин. Проверьте, имеют ли два заданных прямоугольника хотя бы одну общую точку (в частности, если прямоугольники касаются по стороне или даже по вершине, они имеют общую точку).
Пример:
Ввод:
1 6 4 3
2 2 9 4
Вывод:"Yes"
Прямоугольники НЕ пересекаются:
- если левый край первого лежит правее правого края второго
- или левый край второго лежит правее правого края первого
- или верхний край первого лежит ниже нижнего края второго
- или верхний край второго лежит ниже нижнего края первого
И соответственно пересекаются в случае, если ни одно из этих условий не выполняется. Получается четырёхэтажная, но несложная зависимость:
isIntersect = not ( (left1 > right2) or
...
)
Xc_distance = abs(Xc1 - Xc2) // - расстояние между центрами
W_average = (W1 + W2) / 2 // - средняя ширина
if ((Xc_distance <= W_average) and (такое же условие для Y))
{
// пересекаются
}
Если координаты первого fxl (first x left), fyb (first y bottom), fxr (first x right), fyt (first y top), а второго sxl и т.д. - то условие перечечения
if (max(fxl,sxl) <= min(fxr,sxr) &&
max(fyb,syb) <= min(fyt,syt)) {
// Пересечение
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей