Всего на сайте:
148 тыс. 196 статей

Главная | Информатика

Нашлось (v)  Просмотрен 88

Заменить (v, w)

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w.

нашлось (v)

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка при этом не изменяется.

Дана программа для исполнителя Редактор:

НАЧАЛО

ПОКА нашлось (222) ИЛИ нашлось (555)

ЕСЛИ нашлось (222)

ТО заменить (222, 5)

ИНАЧЕ заменить (555, 2)

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из

А) 247 идущих подряд цифр 5?

Б) 247 идущих подряд цифр 2?

В ответе запишите полученную строку.

Решение (В.Ю. Беспалова, г. Каменск-Уральский):

1) Рассмотрим алгоритм решения для пункта А. Дана последовательность из 247 пятерок. Вначале, так как трёх «2» в последовательности нет, согласно алгоритму, первые три «5» заменяются одной «2». Получается одна «2» и двести сорок четыре «5».

2) Так как еще не набирается трёх «2», происходит следующая замена трёх «5» на «2». И имеется теперь две «2» и двести сорок одна «5».

3) Трёх «2» по-прежнему нет, поэтом опять три следующие «5» заменяются на «2», и теперь имеем три «2» и двести тридцать восемь «5». Так как появились три «2», они заменяются на одну «5».

4) Далее операции повторяются. Таким образом, девять «5» заменяются на одну «5», то есть можем сказать, что при каждом повторении описанных выше действий вычеркиваются по восемь «5».

5) Поэтому найдем, сколько «5» остались невычеркнутыми. Для этого вычислим целочисленный остаток от деления 247 (количество «5» по условиям вначале) на 8.

Это 7. То есть остаются семь «5»: 5555555.

6) Теперь заменим первые три «5» двойкой, получится 25555. Далее снова заменим три «5» на «2», и в итоге ответ: 225.

7) Как же поступить, если остаток от деления равен 0? Например, будут даны вначале двадцать четыре «5». Тогда выполним шаг назад, когда оставались последние восемь «5» и преобразуем последовательность. Имеем: 55555555, далее 255555, затем 2255.

8) Теперь рассмотрим решение для пункта Б. Дана последовательность из 247 двоек. Первые три «2» заменяются «5», далее следующие три «2» заменяются на «5», и следующие три «2» заменяются «5».

9) Несмотря на то, что набирается три «5», не происходит замена трех «5» на «2», так как ветвь «Иначе» выполняется только в том случае, если не отработала ветвь «То». А так как далее идет последовательность «2», в которой количество «2» больше, чем две, происходит замена следующих идущих подряд трех «2» на «5», и так далее.

10) Подсчитаем, сколько раз три «2» заменятся на «5». Вычислим целую часть от деления 247 на 3. Это 82. То есть в последовательности станет восемьдесят две «5» и оставшаяся одна «2» (целочисленный остаток от деления 247 на 3).

11) Теперь к последовательности «5» применим алгоритм, описанный в пункте А. Найдем целочисленный остаток от деления 82 на 8. Это будет 2, то есть останется две «5» и плюс еще одна «2», полученная ранее. Имеем последовательность «552».

12) Ответ: А) 225. Б) 552.

Ещё пример задания:

Р-09.Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.

Предыдущая статья:ЕДИНСТВО ЖИЗНИ И СТРЕМЛЕНЬЯ Следующая статья:Б) нашлось (v)
page speed (0.0403 sec, direct)