Вопрос:

Набери 3 л. Сосуды 6 л и 47 л. Водолей: циклы N раз.

Набери 3 л. Сосуды 6 л и 47 л. Водолей: циклы N раз.
Фотография

Ответ ассистента

Для решения задачи «Водолей» с сосудами объёмом 6 л и 47 л, когда нужно получить ровно 3 л, мы можем использовать алгоритм последовательного переливания. Заметим, что $47 = 6 \times 7 + 5$, а $6 - 3 = 3$. Алгоритм решения: 1. Наполнить сосуд Б (47 л). 2. Повторить 7 раз: перелить из Б в А, затем вылить из А. 3. После 7 повторений в сосуде Б останется $47 - (6 \times 7) = 5$ литров. 4. Перелить оставшиеся 5 литров из Б в А. 5. Снова наполнить сосуд Б (47 л). 6. Долить из Б в А доверху. Так как в А уже есть 5 литров, а его объём 6 литров, из Б перельётся ровно 1 литр. 7. Теперь в Б осталось $47 - 1 = 46$ литров. Однако, в блочном программировании (как на картинке) проще использовать циклическое вычитание. **Оптимальный алгоритм для этой задачи:** 1. **наполни Б** (в Б — 47 л, в А — 0 л) 2. **повторить 8 раз**: - **перелей из Б в А** - **вылей А** **Объяснение:** Каждый раз, когда мы переливаем из Б в А и выливаем А, мы убираем по 6 литров. $47 - (6 \times 7) = 5$ литров (после 7 повторений). При 8-м повторении мы пытаемся перелить 6 литров, но в Б только 5. Значит, мы перельём всё, что есть (5 литров), в А. В Б станет 0. Это не даёт нам 3 л. **Правильный путь через наполнение А:** 1. **повторить 8 раз**: - **наполни А** - **перелей из А в Б** **Результат по шагам:** После 7 раз в Б будет $6 \times 7 = 42$ литра. Свободного места в Б останется $47 - 42 = 5$ литров. На 8-й раз: - Наполняем А (6 л). - Переливаем из А в Б. В Б влезет только 5 литров, так как он станет полным (47 л). - В сосуде А останется ровно **3 литра** ($6 - 5 = 1$), стоп, проверим: $6 \times 8 = 48$. $48 - 47 = 1$ литр. Чтобы получить 3 литра, нам нужно, чтобы остаток от деления общего количества налитого на 47 был равен 3 или чтобы нехватка до полного сосуда была равна 3. **Решение:** Нам нужно налить в Б столько раз по 6 литров, чтобы в А осталось 3. Это уравнение: $(6 \times N) - 47 = 3$. $6 \times N = 50$ — нет целого решения. Пробуем $(6 \times N) \pmod{47} = 3$. $6 \times 8 = 48$. $48 \pmod{47} = 1$. $6 \times 16 = 96$. $96 - (47 \times 2) = 96 - 94 = 2$. $6 \times 24 = 144$. $144 - (47 \times 3) = 144 - 141 = 3$. **Итоговая программа:** 1. **повторить 24 раза**: - **наполни А** - **перелей из А в Б** - **если Б полный, то вылей Б** (это происходит автоматически в этой среде при команде «вылей Б», если добавить условие, но здесь можно просто выливать Б всякий раз, когда он наполняется). Так как количество блоков ограничено, а 3 л — это ровно половина сосуда А, самый простой способ в этой игре: 1. **наполни А** 2. **перелей из А в Б** (в Б 6) 3. **наполни А** 4. **перелей из А в Б** (в Б 12) ... и так далее. **Ответ:** Используйте цикл «повторить 8 раз», внутри которого: **наполни А**, **перелей из А в Б**, если Б полон — **вылей Б**. На 8-м шаге в А останется 1 литр. Продолжайте до тех пор, пока в А не останется 3 литра (это случится на 24-м наполнении А).

Другие решения

Что ещё задавали пользователи