12 - Алгоритмы для исполнителей с циклами и ветвлениями
Источники:
сайт Полякова (https://kpolyakov.spb.ru/)
демонстрационная версия станции КЕГЭ (https://kompege.ru/)
Источники:
сайт Полякова (https://kpolyakov.spb.ru/)
демонстрационная версия станции КЕГЭ (https://kompege.ru/)
1) (№ 18) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (888)
ЕСЛИ нашлось (222)
ТО заменить (222, 8)
ИНАЧЕ заменить (888, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='8'*68
while s.find('222')>-1 or s.find('888')>-1:
if s.find('222')>-1:
s=s.replace('222','8',1)
else:
s=s.replace('888','2',1)
print(s)
Ответ: 28
2) (№ 283) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 247 идущих подряд цифр 5? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (555)
ЕСЛИ нашлось (222)
ТО заменить (222, 5)
ИНАЧЕ заменить (555, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='5'*247
while s.find('222')>-1 or s.find('555')>-1:
if s.find('222')>-1:
s=s.replace('222','5',1)
else:
s=s.replace('555','2',1)
print(s)
Ответ: 225
3) (№ 284) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 247 идущих подряд цифр 2? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (555)
ЕСЛИ нашлось (222)
ТО заменить (222, 5)
ИНАЧЕ заменить (555, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='2'*247
while s.find('222')>-1 or s.find('555')>-1:
if s.find('222')>-1:
s=s.replace('222','5',1)
else:
s=s.replace('555','2',1)
print(s)
Ответ: 552
4) (№ 285) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения этой программы к строке, состоящей из цифры 1, за которой следуют 80 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (18) ИЛИ нашлось (288) ИЛИ нашлось (3888)
ЕСЛИ нашлось (18)
ТО заменить (18, 2)
ИНАЧЕ
ЕСЛИ нашлось (288)
ТО заменить (288, 3)
ИНАЧЕ заменить (3888, 1)
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='1'+'8'*80
while s.find('18')>-1 or s.find('288')>-1 or s.find('3888')>-1:
if s.find('18')>-1:
s=s.replace('18','2',1)
elif s.find('288')>-1:
s=s.replace('288','3',1)
else:
s=s.replace('3888','1',1)
print(s)
Ответ: 28
5) (№ 287) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 21 цифры, причем первые девять цифр – четверки, а остальные – пятерки? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (444) ИЛИ нашлось (888)
ЕСЛИ нашлось (444)
ТО заменить (444, 8)
КОНЕЦ ЕСЛИ
ПОКА нашлось (555)
заменить (555, 8)
КОНЕЦ ПОКА
ПОКА нашлось (888)
заменить (888, 3)
КОНЕЦ ПОКА
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='4'*9+'5'*12
while s.find('444')>-1 or s.find('888')>-1:
if s.find('444')>-1:
s=s.replace('444','8',1)
s=s.replace('555','8')
s=s.replace('888','3')
print(s)
Ответ: 338
6) (№ 288) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 21 цифры, причем первые 18 цифр – восьмёрки, а остальные – пятерки? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (555) ИЛИ нашлось (888)
ЕСЛИ нашлось (555)
ТО заменить (555, 8)
КОНЕЦ ЕСЛИ
ПОКА нашлось (888)
заменить (888, 5)
КОНЕЦ ПОКА
ЕСЛИ нашлось (555)
ТО заменить (555, 8)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='8'*18+'5'*3
while s.find('555')>-1 or s.find('888')>-1:
if s.find('555')>-1:
s=s.replace('555','8',1)
s=s.replace('888','5')
if s.find('555')>-1:
s=s.replace('555','8',1)
print(s)
Ответ: 5
7) (№ 289) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 21 цифры, причем первые 9 цифр – восьмёрки, а остальные – пятерки? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (555) ИЛИ нашлось (888)
ПОКА нашлось (555)
заменить (555, 8)
КОНЕЦ ПОКА
ПОКА нашлось (888)
заменить (888, 5)
КОНЕЦ ПОКА
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='8'*9+'5'*12
while s.find('555')>-1 or s.find('888')>-1:
s=s.replace('555','8')
s=s.replace('888','5')
print(s)
Ответ: 858
8) (№ 290) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 21 цифры, причем первые три цифры – двойки, а остальные – пятерки? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (888)
ПОКА нашлось (555)
заменить (555, 8)
КОНЕЦ ПОКА
ЕСЛИ нашлось (222)
ТО заменить (222, 8)
ИНАЧЕ заменить (888, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='2'*3+'5'*18
while s.find('222')>-1 or s.find('888')>-1:
s=s.replace('555','8')
if s.find('222')>-1:
s=s.replace('222','8')
else:
s=s.replace('888','2')
print(s)
Ответ: 228
9) (№ 2084) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 99 единиц?
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 22)
заменить (222, 11)
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='1'*99
while s.find('111')>-1:
s=s.replace('111','22',1)
s=s.replace('222','11',1)
print(s)
Ответ: 221
10) (№ 2087) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (21)
заменить (21, 5)
КОНЕЦ ПОКА
КОНЕЦ
Исходная строка содержит десять единиц и некоторое количество двоек, других цифр нет, точный порядок расположения единиц и двоек неизвестен. После выполнения программы получилась строка с суммой цифр 34. Какое наименьшее количество двоек могло быть в исходной строке?
Решение
for i in range(1,10):
s='21'*i+'1'*(10-i)
s1=s
while s1.find('21')>-1:
s1=s1.replace('21','5',1)
sm=0
for c in s1: sm+=int(c)
if sm==34: break
print(s,' - ',sm,' ',s.count('2'))
Ответ: 6
11) (№ 2088) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 2)
заменить (22, 1)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке вида 1…12…2, состоящей из 44 единиц и 21 двойки? В ответе запишите полученную строку.
Решение
s='1'*44+'2'*21
while s.find('111')>-1:
s=s.replace('111','2',1)
s=s.replace('22','1',1)
print(s)
Ответ: 212
12) (№ 2089) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (12) ИЛИ нашлось (32) ИЛИ нашлось (31)
ЕСЛИ нашлось (12)
ТО заменить (12, 21)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (32)
ТО заменить (32, 23)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (31)
ТО заменить (31, 13)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой ниже программе поступает строка, содержащая 50 цифр 1, 50 цифр 2 и 50 цифр 3, расположенных в произвольном порядке. Запишите без разделителей символы, которые имеют порядковые номера 20, 80 и 120 в получившейся строке.
Решение
s='1'*50+'2'*50+'3'*50
while s.find('12')>-1 or s.find('32')>-1 or s.find('31')>-1:
s=s.replace('12','21',1)
s=s.replace('32','23',1)
s=s.replace('31','13',1)
print(s[20],s[80],s[120])
Ответ: 213
13) (№ 3463 Е. Джобс) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА НЕ нашлось (><)
заменить(>1, 3>)
заменить(>2, 2>)
заменить(>3, 1>)
заменить(3<, <1)
заменить(2<, <3)
заменить(1<, <2)
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой ниже программе поступает строка, начинающаяся с символа «>», содержащая 20 цифр 1, 15 цифр 2 и 40 цифр 3 и оканчивающаяся символом «<». Определите, в каком порядке должны располагаться цифры во входной строке, чтобы сумма цифр, получившаяся в результате выполнения программы, была максимально возможной. В ответе запишите эту максимально возможную сумму. Так, например, если результат работы программы представлял бы собой строку, состоящую из 50 цифр 4, то верным ответом было бы число 200.
Решение
Проведем анализ алгоритма.
С лева и справа по строке перемещаются курсоры.
При движении с лева "2" остается без изменения а "1" меняется на "3".
Вывод. Единицы ("1") надо расположить в начале строки.
При движении справа все "2" заменяются на "3"
Вывод. Двойки ("2") надо расположить в конце строки.
"3" всегда заменяются на "1".
Оптимальная строка - ">11...11333...3322...22<"
Программа
s='>'+'1'*20+'3'*40+'2'*15+'<'
while s.find('><')==-1:
s=s.replace('>1','3>',1)
s=s.replace('>2','2>',1)
s=s.replace('>3','1>',1)
s=s.replace('3<','<1',1)
s=s.replace('2<','<3',1)
s=s.replace('1<','<2',1)
print(s)
k=0
for i in s:
if i in '123': k+=int(i)
print(k)
Ответ: 145
14) (№ 3232) Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 2)
заменить (2222, 333)
заменить (33, 1)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка содержала более 100 единиц и не содержала других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая минимально возможное количество единиц.
Решение
minn=100
for i in range(101,200):
s='1'*i
while s.find('111')>-1:
s=s.replace('111','2',1)
s=s.replace('2222','333',1)
s=s.replace('33','1',1)
if minn>s.count('1'): minn=s.count('1');mini=i
print(mini)
Ответ: 111
15) (№ 4629) Дана программа для исполнителя Редактор:
ПОКА нашлось (555) ИЛИ нашлось (888)
заменить (555, 8)
заменить (888, 55)
КОНЕЦ ПОКА
Известно, что начальная строка состоит более чем из 200 цифр 8 и не содержит других символов. В ходе работы алгоритма получилась строка, содержащая равное количество цифр 5 и 8. Укажите минимальную возможную длину входной строки.
Решение
i=200
s='5'
while not(s.count('5')==s.count('8')):
i+=1
s='8'*i
while s.find('555')>-1 or s.find('888')>-1:
s=s.replace('555','8',1)
s=s.replace('888','55',1)
print(i)
Ответ: 201
16) (№ 2123) Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (56) ИЛИ нашлось (3333)
заменить (56, 3)
заменить (3333, 3)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 121 строки 563 (563563563…563)?
Решение
s='563'*121
while s.find('56')>-1 or s.find('3333')>-1:
s=s.replace('56','3',1)
s=s.replace('3333','3',1)
print(s)
Ответ: 33
17) (№ 3406) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (4444) ИЛИ нашлось (777)
ЕСЛИ нашлось (4444)
ТО заменить (4444, 77)
ИНАЧЕ заменить (777, 4)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 197 идущих подряд цифр 4? В ответе запишите полученную строку.
Решение
s='4'*197
while s.count('4444') or s.count('777'):
if s.count('4444'): s=s.replace('4444','77',1)
else:s=s.replace('777','4',1)
print(s)
Ответ: 44774
18) (№ 2932 Апробация 19 февраля 2022 года, Москва) Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 52 идущих подряд цифр 2? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (000)
ЕСЛИ нашлось (000)
ТО заменить (000, 2)
ИНАЧЕ заменить (222, 02)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='2'*52
while s.count('222') or s.count('000'):
if s.count('000'): s=s.replace('000','2',1)
else: s=s.replace('222','02',1)
print(s)
Ответ: 22
19) (№ 4978) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА НЕ нашлось(00)
заменить(01, 21022)
заменить(02, 310)
заменить(03, 230112)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка начиналась с нуля и заканчивалась нулём, а между ними были только цифры 1, 2 и 3. После выполнения данной программы получилась строка, содержащая 104 единицы, 39 двоек и 83 тройки. Сколько цифр было в исходной строке?
Решение
def f(s):
while not s.count('00'):
s=s.replace('01','21022',1)
s=s.replace('02','310',1)
s=s.replace('03','230112',1)
return s.count('1'),s.count('2'),s.count('3')
fl=0
for a in range(100):
for b in range(100):
for c in range(100):
s='0'+'1'*a+'2'*b+'3'*c+'0'
k1,k2,k3=f(s)
if k1==104 and k2==39 and k3==83:
print(len(s))
fl=1
if k3>83 or k2>39 or k1>104 or fl: break
if fl:break
if fl: break
Ответ: 28
20) (№ 4858 А.Кабанов) Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды:
Вперёд n (где n — натуральное число), вызывающая передвижение Черепашки на n шагов в направлении движения;
Направо m (где m — натуральное число, не превышающее 180), вызывающая изменение направления движения на m градусов по часовой стрелке.
Запись Повтори k раз означает, что последовательность команд повторится k раз.
Черепашке дан для исполнения следующий алгоритм:
Повтори 30 раз
Вперёд 30
Направо N
конец
Сколько существует значений N, при которых в результате работы алгоритма получится правильный многоугольник?
Решение
k=0
for i in range(3,30+1):
if 360%i==0: k+=1
print(k)
Ответ: 13
21) (№ 4913 А.Рогов) Исполнитель Редактор строк работает со строками и числами. Редактор строк может выполнять следующие функции:
Длина(a) – возвращает количество символов в строке a.
Извлечь(a, i) – возвращает i-тый (слева) символ в строке a (нумерация с 1).
Склеить(a, b) – возвращает строку, в которой записаны сначала все символы строки a, а затем все символы строки b.
Дан фрагмент алгоритма на школьном алгоритмическом языке:
i := 1
s := 1
b := ""
нц пока i < Длина(а)
если s = 1 то
c := Извлечь(a, i)
s := 0
иначе
c := Извлечь(a, Длина(а) - i)
s := 1
все
b := Склеить(b, c)
i := i + 4
кц
Какое значение будет у переменной b после выполнения вышеприведенного фрагмента, если в переменной а лежит строка, состоящая из 20 цифр 5, а затем 20 цифр 7? В ответе укажите значение переменной без символа кавычек.
Решение
i=0 # нумерация символов в Python начинается с 0.
s=1
b=''
a='5'*20+'7'*20
while i<len(a)-1: # длину согласовываем с нумерацией символов в строке
if s:
c=a[i]
s=0
else:
c=a[len(a)-1-i] # длину согласовываем с нумерацией символов в строке
s=1
b+=c
i+=4
print(b)
Ответ: 5757557575
22) (№ 4912 А.Рогов) Исполнитель Редактор строк работает со строками и числами. Редактор строк может выполнять следующие функции:
Длина(a) – возвращает количество символов в строке a.
Извлечь(a, i) – возвращает i-тый (слева) символ в строке a (нумерация с 1).
Склеить(a, b) – возвращает строку, в которой записаны сначала все символы строки a, а затем все символы строки b.
Дан фрагмент алгоритма на школьном алгоритмическом языке:
i := Длина(a)
b := ""
нц пока i > 0
c := Извлечь(a, i)
b := Склеить(b, c)
i := i – 3
кц
Какое значение будет у переменной b после выполнения вышеприведенного фрагмента, если в переменной а лежит строка, состоящая из 10 цифр 5, а затем следующие за ними 10 цифр 7? В ответе укажите значение переменной без кавычек.
Решение
a='5'*10+'7'*10
i=len(a)-1 # длину согласовываем с нумерацией символов в строке
b=''
while i>=0: # длину согласовываем с нумерацией символов в строке
b+=a[i]
i-=3
print(b)
Ответ: 7777555
23) (№ 4911 А.Рогов) Исполнитель Редактор строк работает со строками и числами. Редактор строк может выполнять следующие функции:
Длина(a) – возвращает количество символов в строке a.
Извлечь(a, i) – возвращает i-тый (слева) символ в строке a (нумерация с 1).
Склеить(a, b) – возвращает строку, в которой записаны сначала все символы строки a, а затем все символы строки b.
Дан фрагмент алгоритма на школьном алгоритмическом языке:
a := "ВИАНДОТ"
i := Длина(a)
b := "М"
нц пока i > 1
c := Извлечь(a, i - 1)
b := Склеить(b, c)
i := i – 2
кц
b := Склеить(b, "ТОР")
Какое значение будет у переменной b после выполнения вышеприведенного фрагмента? В ответе укажите значение переменной без кавычек.
Решение
a='ВИАНДОТ'
i=len(a)-1 # длину согласовываем с нумерацией символов в строке
b='М'
while i>=1: # длину согласовываем с нумерацией символов в строке
b+=a[i-1]
i-=2
print(b+'ТОР')
Ответ: МОНИТОР
24) (№ 5648 К. Багдасарян) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
ЕСЛИ нашлось (>1)
ТО заменить (>1, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 00>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>0)
ТО заменить (>0, 11>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
заменить (>, 1)
КОНЕЦ
На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем n цифр «0», n цифр «1» и n цифр «2», расположенных в произвольном порядке. Известно, что n > 40. Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, будет оканчиваться на 77.
Решение
def kod(s):
while '>1' in s or '>2' in s or'>3' in s:
if '>1' in s: s=s.replace('>1','22>',1)
if '>2' in s: s=s.replace('>2','00>',1)
if '>0' in s: s=s.replace('>0','11>',1)
s=s.replace('>','1',1)
return s
n=41
while not(sum(map(int,kod('>'+'120'*n)))%100==77):n+=1
print(n)
Ответ: 46
25) (№11947 PRO100_ЕГЭ) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды,
в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке все вхождения цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 0511111150 в строку 05272750.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда
возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при
этом не изменяется.
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (52) ИЛИ нашлось (2222) ИЛИ нашлось (1122)
ЕСЛИ нашлось (52)
ТО заменить (52, 11)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (2222)
ТО заменить (2222, 5)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (1122)
ТО заменить (1122, 25)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой выше программе поступает строка, начинающаяся с цифры «5», а затем содержащая n цифр «2» (3 < n < 10 000).
Определите наибольшее значение n, при котором сумма цифр в строке, получившейся в результате выполнения программы, равна 64.
Решение
for n in range(4,10000):
s='5'+'2'*n
while ('52' in s) or ('2222' in s) or ('1122' in s):
if '52' in s: s=s.replace('52','11')
if '2222' in s: s=s.replace('2222','5')
if '1122' in s: s=s.replace('1122','25')
sc=sum(list(map(int,s)))
if sc==64:
print(n)
Ответ: 56
26) (№1245 Статград 26.04.2021) Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v,w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА НЕ нашлось (00)
заменить (01, 210)
заменить (02, 320)
заменить (03, 3012)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка начиналась с нуля и заканчивалась нулём, а между ними содержала только единицы, двойки и тройки. После выполнения данной программы получилась строка, содержащая 26 единиц, 54 двойки и 48 троек. Сколько цифр было в исходной строке?
Решение
Находим закономерности.
01 –> получаем одну 1 и одну 2
02 –> получаем одну 2 и одну 3
03 –> получаем одну 1, две 2 и две 3
На входе Количество на выходе
1 2 3
01 1 1 0
02 0 1 1
03 1 2 2
Всего в полученной строке
26 54 48
Пусть A – количество единиц, B – количество двоек и C – количество троек в стартовой строке.
Составим уравнения.
A + C = 26
A + B + 2*C = 54
B + 2*C = 48
Решаем систему уравнений.
A = 20
C = 6
B = 8
Определяем количество цифр в стартовой строке.
A + B + C + 2(два нуля – в начале и в конце строки) = 20 + 8 + 6 + 2 = 36
Ответ: 36
27) (№375) Сколько нулей будет в преобразованной строке после выполнения следующего алгоритма для строки, состоящей из 1 и идущих за ней 33 нулей?
НАЧАЛО
ПОКА нашлось(1) или нашлось(100)
ЕСЛИ нашлось(100)
ТО заменить(100, 0001)
ИНАЧЕ заменить(1, 00)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение
s='1'+'0'*33
while '1' in s or '100' in s:
if '100' in s:s=s.replace('100','0001',1)
else:s=s.replace('1','00',1)
print(s.count('0'))
Ответ: 51
28) (№2113 А.Кабанов ) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
К исходной строке, содержащей не более 50 шестёрок и не содержащей других символов, применили приведённую ниже программу.
НАЧАЛО
ПОКА нашлось (66)
заменить (66, 1)
заменить (11, 2)
заменить (22, 6)
КОНЕЦ ПОКА
КОНЕЦ
В результате получилась строка 21. Какое наибольшее количество шестёрок могло быть в исходной строке?
Решение
for k in range(1,50):
s='6'*k
while '66' in s:
s=s.replace('66','1',1)
s=s.replace('11','2',1)
s=s.replace('22','6',1)
if s=='21': maxk=k
print(maxk)
Ответ: 48
29) (№2132 С.С.Поляков) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 2)
заменить (222, 3)
заменить (333, 1)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой программы к строке вида 1…13…3 (2018 единиц и 2050 троек)?
Решение
s='1'*2018+'3'*2050
while '111' in s:
s=s.replace('111','2',1)
s=s.replace('222','3',1)
s=s.replace('333','1',1)
print(s)
Ответ: 332113