стереть
Класс
8 9 10 11
Нужно авторизоваться
Нужно авторизоваться
Нужно авторизоваться
Нет аккаунта?
При наличии аккаунта на платформе можно
Введите больше 6 символов
Проблемы со входом?
Введи последние 4 цифры номера, с которого
поступит звонок. Трубку брать не нужно.
Повторный звонок через
сек.
Добро пожаловать!
Зарегистрируйся и получи Демо мастер-группы на 10 дней по любимым предметам бесплатно.
Добро пожаловать!
Как тебя зовут?
Введите не меньше 2 символов
Привяжем номер телефона
Введите не меньше 2 символов
Привяжем номер телефона
Повторный звонок через
30 сек.
Теперь нужно подтвердить номер - введи последние 4 цифры номера, с которого поступит звонок. Трубку брать не нужно
Введите не меньше 2 символов
Придумаем пароль
Почти закончили! Теперь нужно создать надежный пароль
Введите не меньше 2 символов
Немного о тебе
В какой класс ты переходишь?
Укажи, какие предметы будешь или хочешь сдавать
Введите не меньше 2 символов
На почту 12345@mail.ru отправлена ссылка для сброса пароля.
OK
Информатика

Задача по теме: "Редактор"

Информатика
Задание 12 Редактор
Подсказка
За подсказку ты получишь лишь половину баллов
Использовать
Автор
Крылов С.С., Чуркина Т.Е. Информатика: единый государственный экзамен. — Москва: Издательство "Национальное образование", 2023. — 256 с. Материалы публикуются в учебных целя
Просмотры
1681
banner-img

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.

А) заменить (v, w).

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды

заменить (111, 27)

преобразует строку 05111150 в строку 0527150.

Если в строке нет вхождений цепочки v, то выполнение команды 

заменить (v, w)

не меняет эту строку.

Б) нашлось (v).

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение "истина", в противном случае возвращает значение "ложь". Строка исполнителя при этом не изменяется.

 

Цикл

    ПОКА условие

       последовательность команд

    КОНЕЦ ПОКА

выполняется, пока условие истинно.

В конструкции 

    ЕСЛИ условие

       ТО команда1

    КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно).

В конструкции

    ЕСЛИ условие

       ТО команда1

       ИНАЧЕ команда2

    КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

 

На вход приведённой программы поступает строка, начинающаяся с символа “>”, а затем содержащая 15 цифр 0, n цифр 1 и 15 цифр 2, расположенных в произвольном порядке.

Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.

 

Дана программа для Редактора:

    НАЧАЛО

    ПОКА нашлось (>0) ИЛИ нашлось (>1) ИЛИ нашлось (>2) 

       ЕСЛИ нашлось (>0)

          ТО заменить (>0, 22>)

       КОНЕЦ ЕСЛИ

       ЕСЛИ нашлось (>1)

          ТО заменить (>1, 2>)

       КОНЕЦ ЕСЛИ

       ЕСЛИ нашлось (>2)

           ТО заменить (>2, 1>)

       КОНЕЦ ЕСЛИ

    КОНЕЦ ПОКА

    КОНЕЦ

 

 

 

loading
Решение
single-task__solution-banner

Решение:

Решение 1 (Аналитически)

Обратим внимание что преобразования символов происходят независимо от порядка и положения цифр 0, 1 или 2. То есть строка “>201” после преобразования будет иметь такую же сумму цифр, как и строка “>021”. Отсюда следует, что порядок символом не имеет значения и в исходной строке 15 нулей преобразуются в 30 двоек, а 15 двоек преобразуются в 15 единиц (ВАЖНО: получившиеся после преобразования новые цифры не участвуют в дальнейшем преобразовании,  т.к. они будут находиться перед символом “>”). В итоге сумма цифр строки составит 30*2 + 15*1 = 75. Ближайшее простое число - это 79. То есть в конечной строке не хватает двух двоек. Чтобы получить две двойки в конечной строке, в начальной должно быть две единицы. Кол-во единиц = n, получается n = 2.

 

Решение 2

Для определения простоты числа можно создать функцию, которая будет перебирать числа в диапазоне range(2, int(x**0.5)+1) и проверять являются ли они делителями x, где x - сумма всех цифр в конечной строке:

 

def simple(x):
    for i in range(2, int(x**0.5)+1):
        if x%i == 0:
            return 0
    return 1

for n in range(50)
    a = '>' + '0'*15 + '1'*n + '2'*15
    while '>0' in a or '>1' in a or '>2' in a:
        if '>0' in a:
            a = a.replace('>0', '22>', 1)
        if '>1' in a:
             a = a.replace('>1', '2>', 1)
        if '>2' in a:
            a = a.replace('>2', '1>', 1)
    x = sum(int(i) for i in a[:-1])
    if simple(x) == 1:
        print(n)
        break

 

 


Ответ: 2

На экзамене это задание принесло бы тебе 2/2 баллов.
Решать еще

Сообщение об ошибке

Расскажите, в каком месте допущена ошибка, мы как можно быстрее её исправим. Спасибо за обратную связь!

Здравствуйте!

Выберите информацию о себе ниже

pay-success-img

Оплата прошла успешно!

pay-un-success-img

Оплата не прошла

Попробуйте снова