В круглосуточном супермаркете, где работает 20 касс, есть только одна хранительница ключей для отмены операций — Галя. Кассиры работают в три смены. После каждого использования ключа для отмены операций в системе сохраняется информация о номере кассы и номере смены. Оба номера представляются с минимально возможным количеством бит и записываются последовательно. В конце месяца, когда проводятся итоги,
Ответ:
Для решения этой задачи можно использовать битовые операции и логические операции.
Для начала, нужно разобраться, сколько информации содержится в каждом числе, чтобы понять, сколько операций производились на каждой кассе и в каждой смене.
Дано:
— 20 касс
— 3 смены
Используем двоичную систему счисления, чтобы записывать номера касс и смен. Для 20 касс нужно 5 битов (2^5 = 32, ближайшая степень двойки большая или равная 20). Для 3-х смен нужно 2 бита (2^2 = 4, ближайшая степень двойки большая или равная 3).
Теперь необходимо создать двумерный массив, в котором каждому элементу будет соответствовать касса и смена, а значение элемента будет обозначать количество операций, которые были выполнены на этой кассе и в этой смене. Начальные значения всех элементов массива устанавливаются равными нулю.
Пусть массив будет иметь размерность 20 на 3:
int[][] operations = new int[20][3];
Теперь, когда массив создан, нужно пройтись по всем сохраненным операциям и увеличить соответствующий элемент массива на единицу.
Предположим, что у нас есть два числа: 01001 (номер кассы) и 11 (номер смены). Для того, чтобы увеличить соответствующий элемент массива на единицу, нужно использовать битовые операции.
Для увеличения элемента operations[2][3] (третья касса, вторая смена) на единицу, нужно выполнить следующую операцию:
operations[2][3]++;
Теперь в массиве operations будет на единицу больше операций на третьей кассе и второй смене.
Когда все операции в месяце закончены, можно приступить к поиску подозреваемого кассира. Для этого можно пройтись по всем элементам массива и найти наибольшее значение.
int maxOperations = 0; int[] suspect = new int[2]; // suspect[0] - номер кассы, suspect[1] - номер смены for (int i = 0; i < operations.length; i++) { for (int j = 0; j maxOperations) { maxOperations = operations[i][j]; suspect[0] = i; // номер кассы suspect[1] = j; // номер смены } } }
Теперь в переменной suspect будет храниться номер кассы и номер смены подозреваемого кассира.
Чтобы ответить на вопрос задачи, нужно вывести значение suspect[0] и suspect[1] (номер кассы и номер смены подозреваемого кассира) на экран.
Например:
System.out.println("Подозреваемый кассир: Касса " + suspect[0] + ", Смена " + suspect[1]);
Таким образом, можно вычислить преступника, основываясь на информации о количестве операций на каждой кассе и в каждой смене, сохраненной в массиве operations.