Для начала проверим, действительно приведенный пример из числа 2 даст 50.
2 умножь на 4 =8
8 прибавь 3 =11
11 умножь на 4 =44
44 прибавь 3 =47
47 прибавь 3 =50 Получилось!
Проверка прошла успешно. При этом, надеюсь, вы обратили внимание, что команда умножения меняет число сильнее, более резко, чем команда сложения. Общее решение получается, когда после нескольких сильных изменений, подгоняем имеющееся число к требуемому маленькими шажками.
Итак, из числа 3 нужно получить число 57.
57 на 4 не делится, последней командой было не умножение.
Предыдущим числом было 57 – 3 = 54
57 mod 4 = 1 (57 = 4*16+1)
54 прибавь 3 = 57 - последняя команда.
54 на 4 снова не делится, очередной командой было не умножение. Предыдущим числом было 54 – 3 = 51
51 прибавь 3 = 54
54 прибавь 3 = 57 - последняя команда.
И 51 на 4 не делится, очередной командой было не умножение. Предыдущим числом было 51 – 3 = 48
48 прибавь 3 = 51
51 прибавь 3 = 54
54 прибавь 3 = 57 - последняя команда.
48 на 4 делится, то есть может быть получено из числа 12 путем умножения на 4. Умножение выполняет большое изменение числа, количество шагов сокращается. В задаче указано, что число шагов должно быть маленьким, поэтому при первой же возможности применить умножение, применим его.
12 умножь на 4 = 48
48 прибавь 3 = 51
51 прибавь 3 = 54
54 прибавь 3 = 57 - последняя команда.
Число 12 тоже делится на 4.
Оно получается, путем умножения, из исходного числа 3.
3 умножь на 4 = 12
12 умножь на 4 = 48
48 прибавь 3 = 51
51 прибавь 3 = 54
54 прибавь 3 = 57 - последняя команда.
Имеем все команды, с помощью которых из числа 3 получается число 57. Всего команд 5, в норму уложились.
Используя номера команд (1 – сложение, 2 – умножение), получаем краткую запись команд: 22111 (умножить-умножить-сложить-сложить-сложить)
Следует отметить, что задача разрешима не для любых исходных данных. Например, из числа 1, число 2 получить нельзя.