Категория B1 • задача №1
Условие задачи
Дано:
у исполнителя Калькулятор две команды, которым присвоены номера:
прибавь 2
умножь на 3
Выполняя первую из них, Калькулятор прибавляет к числу на экране 2, а выполняя вторую - умножает его на 3.
(Например, программа 21211 - это программа
умножь на 3
прибавь 2
умножь на 3
прибавь 2
прибавь 2
которая преобразует число 2 в 28).
Найти:
запишите порядок команд в программе получения из числа 0 числа 56, содержащей не более 5 команд, указывая лишь номера команд.
Решение
I этап: проанализируем допустимые команды исполнителя и выберем метод решения задачи.
Так как обе команды Калькулятора увеличивают число (прибавь 2, умножь на 3), то более рационально решать данную задачу методом от обратного, то есть, стремиться получить из числа 56 число 0. Причем, заданные команды исполнителя меняются на противоположные, то есть: если преобразуемое число делится на 3-и без остатка, то будем проводить деление, иначе вычитать 2-ку.
Возникает закономерный вопрос, а почему сначала производится попытка деления на 3-и? Дело в том, что операция деления на 3-и гораздо более мощная, чем операция вычитания 2-ух, так как, число при делении уменьшается гораздо более стремительно, чем при вычитании. Следовательно, чтобы максимально быстро произвести получения нужного числа, требуется отдавать предпочтение таким операциям, как умножение и деление, а не вычитание и сложение.
II этап: процесс получения из числа 56-ть числа 0-ль.
Воспользуемся процессинговой таблицей, состоящей из 4-рех колонок:
отвечает за номер команды (напомню, что допускается не более пяти команд для преобразования);
отвечает за текущее число;
отвечает за операцию (деление на 3-и или вычитание 2-ух);
отвечает за результат, то есть за то значение числа, к которому была применена операция.
№ команды | Число | "Деление на 3" или "Вычитание 2" | Результат |
1 | 56 | Вычитание 2 | 56 - 2 = 54 |
2 | 54 | Деление на 3 | 54 / 3 = 18 |
3 | 18 | Деление на 3 | 18 / 3 = 6 |
4 | 6 | Деление на 3 | 6 / 3 = 2 |
5 | 2 | Вычитание 2 | 2 - 2 = 0 |
III этап: необходимо корректно выписать команды исполнителя Калькулятор, преобразующего число 0-ль в число 56-ть.
Для правильного выписывания команд исполнителя, надо вспомнить, что мы прибегли к методу от обратного, следовательно, и команды нужно выписывать из конца таблицы (от последней записи) к началу таблицы (к первой записи), а также вместо операции "деление на 3" над подставлять операцию "умножить на 3" и, соответственно, вместо "вычти 2" - операцию "прибавь 2".
Начнем выписывание команд: 0 ⇒ (+2)(*3)(*3)(*3)(+2) ⇒ 56 или 0 ⇒ 12221 ⇒ 56
Произведем дополнительную верификацию: 0 ⇒ (((0 + 2) * 3) * 3) * 3 + 2 = 56 - ВЕРНО!
Вывод: |
порядок команд исполнителя Калькулятор для получения из числа 0 числа 56, содержащей не более 5 команд, имеет вид: 12221 |
Резюме
после анализа условия задачи выбрали метод решения от обратного;
построили процессинговую таблицу, в которой операции заменены на своих антагонистов;
выписали порядок команд из построенной таблицы, учитывая, что их нужно "переворачивать".
Ответ: |
12221 |
Комментарии