Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 12. Информатика. ЕГЭ. Поляков-8321
- Просмотры: 520
- Изменено: 6 января 2026
*(Г. Гутман) На ленте исполнителя МТ в соседних ячейках записана последовательность из \(600\) символов, включающая только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка расположена в ближайшей ячейке справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | \(2\) | |
| \(q_0\) | \(\lambda , \, L, \, q_0\) | \(0, \, L, \, q_1\) | \(1, \, L, \, q_1\) | |
| \(q_1\) | \(\lambda , \, S, \, q_1\) | \(0, \, L, \, q_1\) | \(1, \, L, \, q_2\) | \(2, \, L, \, q_3\) |
| \(q_2\) | \(\lambda , \, S, \, q_2\) | \(1, \, L, \, q_2\) | \(2, \, L, \, q_3\) | \(0, \, L, \, q_1\) |
| \(q_3\) | \(\lambda , \, S, \, q_3\) | \(2, \, L, \, q_3\) | \(0, \, L, \, q_1\) | \(1, \, L, \, q_2\) |
Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(N\) — нет перемещения, \(S\) – стоп. После выполнения программы в преобразованной строке оказалось поровну символов \(0, \, 1\) и \(2.\) Определите максимально возможное число единиц в исходной последовательности.
Решение:
Если изначально на ленте будут все единицы, то в конечной последовательности окажется \(201\) единиц, \(199\) нулей и \(200\) двоек. Поэтому в начальной ленте есть хотя бы один ноль. Поместим его в самый конец. Тогда в конечной последовательности количество нулей, единиц и двоек будет одинаковое количество.
Python
tab = {('q0', 'l'): 'l,L,q0', ('q0', '0'): '0,L,q1', ('q0', '1'): '1,L,q1',
('q1', 'l'): 'l,S,q1', ('q1', '0'): '0,L,q1', ('q1', '1'): '1,L,q2', ('q1', '2'): '2,L,q3',
('q2', 'l'): 'l,S,q2', ('q2', '0'): '1,L,q2', ('q2', '1'): '2,L,q3', ('q2', '2'): '0,L,q1',
('q3', 'l'): 'l,S,q3', ('q3', '0'): '2,L,q3', ('q3', '1'): '0,L,q1', ('q3', '2'): '1,L,q2',}
move = {'L': -1, 'S': 0, 'N': 0}
#strip = ['l'] + ['1'] * 600 + ['l']
strip = ['l'] + ['1'] * 599 + ['0'] + ['l']
p = len(strip) - 1
act = 'L'
state = 'q0'
while act != 'S':
strip[p], act, state = tab[(state, strip[p])].split(',')
p += move[act]
print('0 -', strip.count('0'), '1 -', strip.count('1'), '2 -', strip.count('2'))
Ответ: \(599\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


