Ответ:
Задание 5. Алгоритм для Вычислителя
Цель: получить число 19 из числа 5, используя команды «приписать 1» (умножить на 10 и прибавить 1) и «разделить на 3» (целочисленное деление), не более 5 команд.
Исходное число: 5
Целевое число: 19
Команды:
- 1. Приписать 1 (x → 10x + 1)
- 2. Разделить на 3 (x → x // 3)
Поиск алгоритма (перебор вариантов):
Начнем с числа 5 и будем применять команды, пытаясь приблизиться к 19.
- Вариант 1:
- 5 --(1)--> 5*10 + 1 = 51
- 51 --(2)--> 51 // 3 = 17
- 17 --(1)--> 17*10 + 1 = 171 (уже слишком много)
- Вариант 2:
- 5 --(1)--> 51
- 51 --(1)--> 511
- ...
- Вариант 3:
- 5 --(1)--> 51
- 51 --(2)--> 17
- 17 --(1)--> 171 (слишком много)
Попробуем сначала разделить, но 5 не делится на 3. Значит, нужно сначала приписать 1.
- Вариант 4:
- 5 --(1)--> 51
- 51 --(2)--> 17
- 17 --(1)--> 171 (снова не то)
- Вариант 5:
- 5 --(1)--> 51
- 51 --(2)--> 17
- 17 --(2)--> 17 // 3 = 5 (вернулись к началу)
- Вариант 6: Нужно попробовать другую последовательность. Цель 19.
- Если последнее действие – «разделить на 3», то предыдущее число должно было быть 19*3 = 57.
- Если последнее действие – «приписать 1», то предыдущее число должно было быть (19-1)/10 = 1.8 (не целое, значит, последнее действие не «приписать 1»).
- 5 --(1)--> 51
- 51 --(1)--> 511 (слишком много)
- 5 --(1)--> 51
- 51 --(1)--> 511 (слишком много)
- Если последняя команда была 'разделить на 3', то предыдущее число было 19 * 3 = 57.
- Если последняя команда была 'приписать 1', то предыдущее число было (19 - 1) / 10 = 1.8. Это не натуральное число, значит, последняя команда не 'приписать 1'.
- Если последняя команда была 'разделить на 3', то предыдущее число было 57 * 3 = 171.
- Если последняя команда была 'приписать 1', то предыдущее число было (57 - 1) / 10 = 5.6. Не натуральное.
Итак, последнее действие – «разделить на 3». Значит, перед этим было число 57.
Как получить 57 из 5?
Проверим, что если последнее действие - 'приписать 1', то предшествующее число должно быть (19-1)/10 = 1.8. Это не натуральное число, значит, последняя команда не 'приписать 1'.
Значит, последняя команда - 'разделить на 3'. Чтобы получить 19, предыдущее число должно было быть 19 * 3 = 57.
Теперь нам нужно получить 57 из 5. Попробуем команды:
Давайте попробуем другую стратегию: начнем с 5 и пойдем к 19, записывая команды.
5 -> ? -> ? -> ? -> ? -> 19
Попробуем команду 'приписать 1' несколько раз, а потом 'разделить на 3'.
5 --(1)--> 51
Теперь нужно получить 19 из 51, используя команды 'приписать 1' и 'разделить на 3'.
51 --(2)--> 51 // 3 = 17
Теперь нужно получить 19 из 17. Это можно сделать командой 'приписать 1', но это даст 171, что слишком много.
Давайте попробуем другой порядок. Попробуем от 19 назад к 5.
19:
Итак, мы ищем путь к 57.
57:
Проблема в том, что мы не можем получить 57 из 5, применив 'приписать 1' только один раз.
Давайте рассмотрим другой подход. Попробуем получить число, которое близко к 19, например, 18.
Как получить 18? 18*3 = 54.
Как получить 19? Если последняя команда
