Дана программа для редактора: НАЧАЛО
ПОКА нашлось (01) ИЛИ нашлось (02) ИЛИ нашлось (03)
заменить (01, 2302)
заменить (02, 10)
заменить (03, 201)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка начиналась с нуля, а далее содержала только единицы, двойки и тройки. После выполнения данной программы получилась строка, содержащая 40 единиц, 10 двоек и 8 троек. Сколько единиц было в исходной строке?
1. Первое условие в цикле ПОКА - "нашлось (01)", оно означает, что программа будет искать последовательность "01".
- Если такая последовательность найдена, то она будет заменена на "2302" в строке.
- Если такой последовательности нет, то программа переходит к следующему условию.
2. Второе условие в цикле ПОКА - "нашлось (02)", оно означает, что программа будет искать последовательность "02".
- Если такая последовательность найдена, то она будет заменена на "10" в строке.
- Если такой последовательности нет, то программа переходит к следующему условию.
3. Третье условие в цикле ПОКА - "нашлось (03)", оно означает, что программа будет искать последовательность "03".
- Если такая последовательность найдена, то она будет заменена на "201" в строке.
- Если такой последовательности нет, то программа переходит к следующему условию.
4. После выполнения всех трех условий в цикле ПОКА, программа переходит к команде КОНЕЦ ПОКА, и если в строке были выполнены какие-либо замены, она возвращается к началу цикла ПОКА и выполняет замены для новых найденных последовательностей. Процесс повторяется до тех пор, пока не будет выполнено ни одно условие.
5. Когда цикл ПОКА заканчивается (то есть не остается больше замен), программа переходит к команде КОНЕЦ и заканчивает работу.
Для решения задачи нам нужно найти, сколько единиц было в исходной строке. Мы знаем, что после выполнения программы получилась строка, содержащая 40 единиц. Давайте поставим себя на место программы и будем вручную выполнять замены.
Предположим, что исходная строка состояла только из единиц, тогда на первом шаге программа нашла бы последовательность "01" и заменила ее на "2302". Но мы знаем, что в получившейся строке есть 10 двоек, поэтому эта строка не может содержать исходную последовательность только из единиц.
Возьмем другую гипотезу, что исходная строка состояла только из единиц и двоек. Тогда на первом шаге программа найдет последовательность "01" и заменит ее на "2302", а затем найдет последовательность "02" и заменит ее на "10". Суммируя количество замен, получаем, что первая и вторая замены привели к появлению 12 новых символов (4 символа "2302" и 8 символов "10"). Получившаяся строка содержит 40 единиц и 10 двоек, то есть всего 50 символов. Это означает, что первоначальная строка не может состоять только из единиц и двоек.
Теперь посмотрим, что произойдет, если исходная строка будет содержать единицы, двойки и тройки. На первом шаге программа найдет последовательность "01" и заменит ее на "2302", затем найдет последовательность "02" и заменит ее на "10" и, наконец, найдет последовательность "03" и заменит ее на "201". Получившаяся строка содержит 40 единиц, 10 двоек и 8 троек, то есть всего 58 символов. Это означает, что исходная строка состояла из 58 символов, включая 40 единиц.
Таким образом, в исходной строке было 40 единиц.