Какое минимальное количество действий (переливаний) потребуется Шреку, чтобы на всех бутылках этикетки соответствовали
Какое минимальное количество действий (переливаний) потребуется Шреку, чтобы на всех бутылках этикетки соответствовали содержимому?
11.12.2023 03:23
Пояснение: В этой задаче Шреку нужно перелить содержимое бутылок так, чтобы каждая бутылка имела этикетку, которая соответствует содержимому. Каждая бутылка имеет этикетку с номером от 1 до N и содержит жидкость соответствующего номера. Однако бутылки перемешались случайным образом, поэтому этикетки не соответствуют содержимому.
Чтобы найти минимальное количество переливаний, Шрек может использовать следующий алгоритм:
1. Шрек должен выбрать любую бутылку и проверить, соответствует ли этикетка содержимому. Если да, она уже на своем месте.
2. Если этикетка бутылки не соответствует содержимому, Шрек должен перелить ее содержимое в пустую бутылку без этикетки.
3. Затем он должен перелить содержимое пустой бутылки в другую бутылку с этикеткой. Теперь этикетка соответствует содержимому.
4. Шрек повторяет шаги 1-3 для каждой неправильно этикетированной бутылки.
Процесс будет продолжаться до тех пор, пока все бутылки не будут иметь правильные этикетки. Общее количество переливаний будет минимальным.
Пример использования: Если у Шрека есть 3 бутылки с этикетками 3, 1 и 2, и их содержимое в случайном порядке свзяны с номерами этикеток следующим образом: бутылка 1 содержит жидкость номер 2, бутылка 2 содержит жидкость номер 3, бутылка 3 содержит жидкость номер 1. Шрек может решить эту задачу следующим образом:
- Шаг 1: Проверить бутылку 1, этикетка 3 не соответствует содержимому. Перелить содержимое бутылки 1 в пустую бутылку.
- Шаг 2: Перелить содержимое пустой бутылки в бутылку с этикеткой 2.
- Шаг 3: Перелить содержимое бутылки 2 в бутылку с этикеткой 3.
- Шаг 4: Проверить бутылку 2, этикетка 1 не соответствует содержимому. Перелить содержимое бутылки 2 в пустую бутылку.
- Шаг 5: Перелить содержимое пустой бутылки в бутылку с этикеткой 1.
- Шаг 6: Перелить содержимое бутылки 1 в бутылку с этикеткой 3.
- Шаг 7: Проверить бутылку 3, этикетка 2 не соответствует содержимому. Перелить содержимое бутылки 3 в пустую бутылку.
- Шаг 8: Перелить содержимое пустой бутылки в бутылку с этикеткой 2.
- Шаг 9: Перелить содержимое бутылки 2 в бутылку с этикеткой 3.
Теперь все бутылки имеют правильные этикетки.
Совет: Шреку полезно использовать пустую бутылку для переливания, чтобы ни одна жидкость не была потеряна.
Упражнение: Даны 5 бутылок с номерами этикеток от 1 до 5 и содержимым в случайном порядке. Составьте алгоритм переливания, чтобы все бутылки имели правильные этикетки.