Шешімі: Преобразование строки редактором
Исполнитель «Редактор» получает на вход строку цифр. Команда заменить(v, w) заменяет первое слева вхождение цепочки v на цепочку w. Команда нашлось(v) проверяет наличие цепочки v в строке, не изменяя её. Если условие цикла ложно, цикл завершается.
Какая строка получится в результате применения программы к строке, состоящей из 100 идущих подряд цифр 1?
НАЧАЛО
ПОКА нашлось(111) ИЛИ нашлось(88888)
ЕСЛИ нашлось(111)
ТО заменить(111, 88)
ИНАЧЕ заменить(88888, 8)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Шешімін қадамдап көрсету
3 қадамПока в строке есть 111, выполняется замена 111 на 88. Из 100 единиц можно выполнить 33 такие замены: останется одна единица, а появится 66 цифр 8.
$$100 - 3 \cdot 33 = 1,\quad 2 \cdot 33 = 66$$После этого строка имеет вид 66 восьмёрок и одна единица. Фрагмента 111 больше нет, поэтому выполняется замена 88888 на 8. Каждая такая замена уменьшает количество восьмёрок на 4.
$$66 - 4 \cdot 16 = 2$$В строке остаются две цифры 8 и одна цифра 1. Ни 111, ни 88888 в ней нет, поэтому цикл завершается.
Где здесь ошибаются
Продолжают заменять 111 после того, как единиц осталось меньше трёх.
Считают, что замена 88888 на 8 удаляет пять цифр, хотя она уменьшает длину цепочки только на төрт.
Забывают сохранить оставшуюся после первых замен цифру 1.