интеллектуальная проблема
Имеются три ведра объемом 3 литра, 5 литров и 8 литров, из которых ведро объемом 8 литров наполнено водой, а ведра объемом 3 литра и объемом 5 литров пустые. . В трех ведрах нет весов.Теперь необходимо разделить 8 литров воды в большом ведре на две равные части,каждая из которых по 4 литра воды.Дополнительным условием является то,что можно использовать только эти три ведра , и никакие другие вспомогательные контейнеры использовать нельзя.
«Ну, да, это очень классический вопрос».
«Однако мы не можем думать обо всем этом. Если вы мне не верите, пожалуйста, продолжайте читать».
Отвечать
«Не говорите чепухи, просто посмотрите на метод».
Первые (7 шагов)
-
Ведро 8л воды, наполнение ведра 5л, далее: 8л ведро 3л, 5л ведро 5л, ведро 0л 3л
-
Заполните 3-литровое ведро водой из 5-литрового ведра, в это время: 8-литровое ведро - 3 л, 5-литровое ведро - 2 л, 3-литровое ведро - 3 л.
-
Налейте воду из ведра 3 л в ведро 8 л, при этом: ведро 8 л - 6 л, ведро 5 л - 2 л, ведро 3 л - 0 л.
-
Налейте воду из 5-литрового ведра в 3-литровое ведро, при этом: 8-литровое ведро - 6 литров, 5-литровое ведро - 0 литров, 3-литровое ведро - 2 литра.
-
Налейте воду из 8-литрового ведра в 5-литровое ведро, при этом: 8-литровое ведро - 1 л, 5-литровое ведро - 5 литров, 3-литровое ведро - 2 л.
-
Наполните ведро на 3 л водой из ведра на 5 л.В это время ведро на 8 л — это 1 л, ведро на 5 л — на 4 л, а ведро на 3 л — на 3 л.
-
Налейте воду из 3-литрового ведра в 8-литровое ведро, при этом: 8-литровое ведро - 4 л, 5-литровое ведро - 4 л, 3-литровое ведро - 0 л.
Второй (8 шагов)
-
Наполните 8-литровое ведро водой из 3-литрового ведра, в это время: 8-литровое ведро — 5 литров, 5-литровое ведро — 0 литров, 3-литровое ведро — 3 литра.
-
Перелейте воду из 3-литрового ведра в 5-литровое ведро, при этом: 8-литровое ведро — 5 литров, 5-литровое ведро — 3 л, 3-литровое ведро — 0 литров.
-
Заполните 3-литровое ведро водой из 8-литрового ведра, в это время: 8-литровое ведро - 2 л, 5-литровое ведро - 3 л, 3-литровое ведро - 3 л.
-
Заполните 5-литровое ведро водой из 3-литрового ведра, в это время: 8-литровое ведро - 2 л, 5-литровое ведро - 5 л, 3-литровое ведро - 1 л.
-
Налейте воду из 5-литрового ведра в 8-литровое ведро, при этом: 8-литровое ведро - 7 литров, 5-литровое ведро - 0 литров, а 3-литровое ведро - 1 литр.
-
Налейте воду из 3-литрового ведра в 5-литровое ведро, при этом: 8-литровое ведро — 7 литров, 5-литровое ведро — 1 л, 3-литровое ведро — 0 литров.
-
Наполните ведро на 3 л водой из ведра на 8 л.В это время ведро на 8 л — это 4 л, ведро на 5 л — на 1 л, а ведро на 3 л — на 3 л.
-
Налейте воду из 3-литрового ведра в 5-литровое ведро, при этом: 8-литровое ведро - 4 л, 5-литровое ведро - 4 л, 3-литровое ведро - 0 л.
Я считаю, что ответов должно быть больше двух. Сколько ответов?
Имея в виду этот вопрос, давайте разработаем алгоритм.
анализ проблемы
человеческое мышление
Ключ к решению этой проблемы заключается в том, как сделать определенный 1 литр воды или пространство, которое может вместить 1 литр воды, наливая воду.
Например, если ведро на 8 л, ведро на 5 л или ведро на 3 л содержит 1 л воды, оно может быстро вылить 4 л воды.
компьютерное мышление
«Исчерпывающий метод»
Исходное состояние ведра: 8-литровое ведро наполнено водой, а 3-литровое и 5-литровое ведра пусты. Окончательное состояние ведра: ведро на 3 л пусто, а ведра на 5 и 8 л содержат по 4 л воды.
Предположим, что объем воды в трех ведрах в каждом штате — это статус.
Получите $status = array(4,4,0) из $status = array(8,0,0).
Конечно, есть некоторые ограничения:
1. Каждое ведро имеет максимальное значение:
0 <= status[0] <= 8;
0 <= status[1] <= 5;
0 <= status[2] <= 3;
2. Состояние каждого ведра после текущего обливания водой не может быть таким же, как состояние каждого ведра после исторического обливания водой.
3. Когда текущее ведро пусто, его нельзя перелить в другие ведра.
4. Когда текущее ведро заполнено до предела, другие ведра не могут наливать воду в это ведро.
Программный код (PHP)
результат операции
Всего существует 16 методов заливки воды, методы следующие:
...
(16 методов слишком длинные, чтобы их публиковать. Все попробуйте локально. Если вам нужен исходный код, обратите внимание на публичный аккаунт и оставьте сообщение.)
резюме
После запуска кода было найдено всего 16 способов налить воду, а самый быстрый способ требовал 7 шагов.
«Как насчет этого, разве ты не ожидал, что будет так много способов, иди и испытай маленьких друзей вокруг тебя».
Эту статью можно переслать, пожалуйста, укажите автора и источник для пересылки, спасибо!