Сравнить две коробки. Что не так?

175
22 ноября 2021, 16:30

На столе две коробки.

Первый блок имеет размер X1 x Y1 x Z1, а второй блок имеет размер X2 x Y2 x Z2.

Вам необходимо определить, какую коробку можно поместить в другую коробку. Вы можете вращать оба поля, как вы хотите.

Вход содержит две строки. Первая строка содержит числа X1, Y1, Z1, вторая строка содержит числа X2, Y2, Z2. Все числа целые числа и больше 0.

  • Если размеры блоков равны, выведите «Box 1 = Box 2».
  • Если первый блок можно поместить во второй блок, выведите «Box 1 <Box 2».
  • Если второй блок можно поместить в первый блок, выведите «Box 1> Box 2».
  • Если ни один из блоков не может быть помещен в другой блок, выведите «Incomparable».
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int a1 = scanner.nextInt();
        int b1 = scanner.nextInt();
        int c1 = scanner.nextInt();
        if (((a + b + c) == (a1 + b1 + c1)) & ((a == a1 | a == b1 | 
              a == c1) & (b == a1 | b == b1 | b == c1) & (c == a1 | 
              c == b1 | c == c1))) {
             System.out.println("Box 1 = Box 2");
        } else if (((a + b + c) < (a1 + b1 + c1)) & ((a < a1 | a < 
              b1 | a < c1) & (b < a1 | b < b1 | b < c1) & (c < a1 | 
              c < b1 | c < c1))) {
             System.out.println("Box 1 < Box 2");
        } else if (((a + b + c) > (a1 + b1 + c1)) & ((a > a1 | a > 
              b1 | a > c1) & (b > a1 | b > b1 | b > c1) & (c > a1 | 
              c > b1 | c > c1))) {
             System.out.println("Box 1 > Box 2");
        } else if ((a > a1 | a >= b1 | a >= c1) & (b > a1 | b >= b1 
              | b >= c1) & (c > a1 | c >= b1 | c >= c1)) {
             System.out.println("Incomparable");
        }
    }
}
Answer 1

Все не так, ребята. Зачем суммы?

Упорядочите тройки чисел по возрастанию. А потом сравнивайте поэлементно.

Одна коробка помещается в другую, если каждый элемент из упорядоченного списка размеров первой коробки (строго?) меньше соответствующего элемента из упорядоченного списка размеров второй коробки.

P.S. И нет никакой необходимости использовать полное вычисление булевских выражений.

Прошло такое решение. Что в нем можно улучшить?

Arrays.sort(arr1); 
Arrays.sort(arr2);
int eq = 0, ge = 0, le = 0;
for (int i = 0; i < arr1.length; i++) {
  eq = eq + (arr1[i] == arr2[i]? 1 : -1);
  ge = ge + (arr1[i] >= arr2[i]? 1 : -1);
  le = le + (arr1[i] <= arr2[i]? 1 : -1);
}
if (eq == arr1.length) {
  System.out.println("Box 1 = Box 2"); 
} else if (ge == arr1.length) {
  System.out.println("Box 1 > Box 2"); 
} else if (le == arr1.length) {
  System.out.println("Box 1 < Box 2"); 
} else {
  System.out.println("Incomparable"); 
}
READ ALSO
Spring работа со сторонним API

Spring работа со сторонним API

Изучаю Spring и вот хочу реализовать работу с методами внешнего API

181
Генерация строки

Генерация строки

Подскажите, как генерировать строку если есть алфавит:

108
Как сохранить список ArrayList в массив

Как сохранить список ArrayList в массив

Нужно сделать параметризованный класс, хранящий массив, с некоторой функциональностью ArrayList в виде функций add(T el), remove(int index), get(int index)

306