ALEXMATH

Информатика. ЕГЭ

Задания для подготовки

Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников

Перейти к заданиям

Задание 12. Информатика. ЕГЭ. Поляков-8263

Просмотры: 2188
Изменено: 21 сентября 2025

(Е. Джобс) На ленте исполнителя МТ в соседних ячейках записана последовательность из \(1000\) символов, включающая только нули, единицы и двойки. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка расположена в ближайшей ячейке слева от последовательности.

Программа работы исполнителя:

\(\lambda\)\(0\)\(1\)\(2\)
\(q_0\)\(\lambda , \, R, \, q_1\)
\(q_1\)\(\lambda , \, S, \, q_1\)\(1, \, R, \, q_1\)\(2, \, R, \, q_1\)\(0, \, R, \, q_1\)

Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(S\) – стоп. Известно, что количество символов \(0\) и \(1\) в исходной строке было одинаково, а сумма значений в исходной строке больше суммы значений в конечной строке на \(200.\) Какое количество цифр \(2\) было в исходной строке?

Решение:

Пусть в исходной строке было \(n\) нулей. Столько же было и единиц. Пусть также двоек сначала было \(d.\) Каждые ноль и единица дают увеличение суммы конечной строки на \(1,\) а каждая двойка уменьшает сумму значений конечной строки на \(2.\) Получаем систему: $$ \begin{cases} 2n + d = 1000, \\ n + 2d - 3n = 200 \end{cases} $$ Значит \(d = 400.\) Проверяем

Python


from random import shuffle
ned = ['0'] * 300 + ['1'] * 300 + ['2'] * 400
shuffle(ned)
s = ['l'] + ned + ['l']
print(f"Количество единиц в начальной строке: {s.count('1')}")
s0 = sum(int(x) for x in s if x != 'l')
print(f"Сумма значений конечной строки: {s0}")
p = 0
state='q0'
table = {'l': {'q0': 'l,R,q1', 'q1': 'l,S,q1'},
         '0': {'q1': '1,R,q1'},
         '1': {'q1': '2,R,q1'},
         '2': {'q1': '0,R,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]
s1 = sum(int(x) for x in s if x != 'l')
print(f"Сумма значений конечной строки: {s1}")
print(f"Сумма значений начальной строки больше суммы значений конечной строки на {s0-s1}")

Ответ: \(400\)

Обсуждение задания

Здесь пока нет ни одного комментария. Будьте первым!

kege1
kege2
kege3
Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене.

Новое видео

Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»

Поддержать автора сайта!

Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.

Совершая донат, вы соглашаетесь с Условиями использования

Расписание пробников Статграда в 2026/27 учебном году