Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 12. Информатика. ЕГЭ. Поляков-8256
- Просмотры: 2775
- Изменено: 20 сентября 2025
На ленте исполнителя МТ в соседних ячейках записана последовательность из \(1000\) символов, включающая только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка расположена в ближайшей ячейке справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | |
| \(q_0\) | \(\lambda , \, L, \, q_1\) | ||
| \(q_1\) | \(\lambda , \, S, \, q_1\) | \(1, \, L, \, q_1\) | \(0, \, S, \, q_1\) |
Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(S\) – стоп. После выполнения программы на ленте осталось ровно \(758\) нулей. Определите минимально возможное число нулей в исходной последовательности.
Решение:
Если в исходной строке нулей совсем нет, то на выходе получится строка из \(1000\) нулей. Значит хотя бы один нуль в исходной строке присутствует. Действительно, если на вход программы подать строку $$\lambda \lambda \underbrace{11\ldots 11}_{241} 0 \underbrace{11\ldots 11}_{758} \lambda \lambda$$ на выходе получится строка, содержащая ровно \(758\) нулей. Для проверки напишем программу
Python
#s = ['l'] + ['1'] * 1000 + ['l'] # Для такой строки в конце выпонения программы будет 1000 нулей
s = ['l'] + ['1'] * 241 + ['0'] + ['1'] * 758 + ['l']
print(f"Количество нулей в начальной строке: {s.count('0')}")
p = len(s) - 1
state='q0'
table = {'l': {'q0': 'l,L,q1', 'q1': 'l,S,q1'},
'0': {'q1': '1,S,q1'},
'1': {'q1': '0,L,q1'}}
act = table[s[p]][state].split(',')
s[p] = act[0]
state = act[2]
step = {'L': 1, 'R': -1, 'S': 0}
while act[1] != 'S':
p -= step[act[1]]
act = table[s[p]][state].split(',')
s[p] = act[0]
state = act[2]
print(f"Количество нулей в конечной строке: {s.count('0')}")
Ответ: \(1\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


