Ответ:

Задание 5. Алгоритм для Вычислителя

Цель: получить число 19 из числа 5, используя команды «приписать 1» (умножить на 10 и прибавить 1) и «разделить на 3» (целочисленное деление), не более 5 команд.

Исходное число: 5

Целевое число: 19

Команды:

  • 1. Приписать 1 (x → 10x + 1)
  • 2. Разделить на 3 (x → x // 3)

Поиск алгоритма (перебор вариантов):

Начнем с числа 5 и будем применять команды, пытаясь приблизиться к 19.

  1. Вариант 1:
    • 5 --(1)--> 5*10 + 1 = 51
    • 51 --(2)--> 51 // 3 = 17
    • 17 --(1)--> 17*10 + 1 = 171 (уже слишком много)
  2. Вариант 2:
    • 5 --(1)--> 51
    • 51 --(1)--> 511
    • ...
  3. Вариант 3:
    • 5 --(1)--> 51
    • 51 --(2)--> 17
    • 17 --(1)--> 171 (слишком много)

    Попробуем сначала разделить, но 5 не делится на 3. Значит, нужно сначала приписать 1.

  4. Вариант 4:
    • 5 --(1)--> 51
    • 51 --(2)--> 17
    • 17 --(1)--> 171 (снова не то)
  5. Вариант 5:
    • 5 --(1)--> 51
    • 51 --(2)--> 17
    • 17 --(2)--> 17 // 3 = 5 (вернулись к началу)
  6. Вариант 6: Нужно попробовать другую последовательность. Цель 19.
    • Если последнее действие – «разделить на 3», то предыдущее число должно было быть 19*3 = 57.
    • Если последнее действие – «приписать 1», то предыдущее число должно было быть (19-1)/10 = 1.8 (не целое, значит, последнее действие не «приписать 1»).

    Итак, последнее действие – «разделить на 3». Значит, перед этим было число 57.

    Как получить 57 из 5?

    • 5 --(1)--> 51
    • 51 --(1)--> 511 (слишком много)

    Проверим, что если последнее действие - 'приписать 1', то предшествующее число должно быть (19-1)/10 = 1.8. Это не натуральное число, значит, последняя команда не 'приписать 1'.

    Значит, последняя команда - 'разделить на 3'. Чтобы получить 19, предыдущее число должно было быть 19 * 3 = 57.

    Теперь нам нужно получить 57 из 5. Попробуем команды:

    1. 5 --(1)--> 51
    2. 51 --(1)--> 511 (слишком много)

    Давайте попробуем другую стратегию: начнем с 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:

    1. Если последняя команда была 'разделить на 3', то предыдущее число было 19 * 3 = 57.
    2. Если последняя команда была 'приписать 1', то предыдущее число было (19 - 1) / 10 = 1.8. Это не натуральное число, значит, последняя команда не 'приписать 1'.

    Итак, мы ищем путь к 57.

    57:

    1. Если последняя команда была 'разделить на 3', то предыдущее число было 57 * 3 = 171.
    2. Если последняя команда была 'приписать 1', то предыдущее число было (57 - 1) / 10 = 5.6. Не натуральное.

    Проблема в том, что мы не можем получить 57 из 5, применив 'приписать 1' только один раз.

    Давайте рассмотрим другой подход. Попробуем получить число, которое близко к 19, например, 18.

    Как получить 18? 18*3 = 54.

    Как получить 19? Если последняя команда