Тема 12. Алгоритмы – анализ сложных алгоритмов

12.03 Исполнитель «Редактор» – определение исходной строки по результату

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – анализ сложных алгоритмов
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 21#74224Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150.Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

Ниже приведена программа для исполнителя Редактор.

НАЧАЛО

   ПОКА нашлось (577) ИЛИ нашлось (775)

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

         ТО заменить (577, 755)

      ИНАЧЕ заменить (775, 57)

      КОНЕЦ ЕСЛИ

   КОНЕЦ ПОКА

КОНЕЦ

На вход этой программе подается строка, состоящая из n цифр (3 < n < 1000); первая и последняя цифра в строке — цифра 5, а остальные цифры – семёрки. При каком наименьшем n сумма цифр строки будет чётной и при этом будет больше 223? В ответе укажите число n.

Показать ответ и решение
for n in range(4,1000):
    s = ’5’+(n-2)*’7’ + ’5’
    while ’577’ in s or ’775’ in s:
        if ’577’ in s: s = s.replace(’577’,’755’,1)
        else: s = s.replace(’775’,’57’, 1)
    if sum(map(int,s)) > 223 and sum(map(int,s)) % 2 == 0:
        print(n)
        break

Ответ: 38

Ошибка.
Попробуйте повторить позже

Задача 22#74225Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (121, 3) преобразует строку 112112 в строку 1312.

Если в строке нет вхождений последовательности v, то выполнение команды не изменяет исходную строку.

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

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

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

НАЧАЛО

   ПОКА нашлось (38) или нашлось (34)

      заменить (38, 434)

      заменить (34, 188)

   КОНЕЦ ПОКА

КОНЕЦ

Известно, что исходная строка начиналась и заканчивалась тройкой, а в середине содержала сначала четверки ,затем восьмерки. После выполнения данной программы получилась строка, содержащая 39 четверки и 37 восьмерок. Сколько четверок и восьмерок в сумме было в исходной строке?

Показать ответ и решение
for n in range(1,100):
    for m in range(1,100):
        s = ’3’ + n*’4’ + m*’8’ + ’3’
        while (’38’ in s) or (’34’ in s):
            s = s.replace(’38’,’434’, 1)
            s = s.replace(’34’,’188’, 1)
        if s.count(’4’) == 39 and s.count(’8’) == 37:
            print(n+m)
            break

Ответ: 75

Ошибка.
Попробуйте повторить позже

Задача 23#84346Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

НАЧАЛО

   ПОКА нашлось (37) ИЛИ нашлось (577) ИЛИ нашлось (7777)

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

         ТО заменить (37, 7)

      КОНЕЦ ЕСЛИ

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

         ТО заменить (577, 73)

      КОНЕЦ ЕСЛИ

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

         ТО заменить (7777, 5)

      КОНЕЦ ЕСЛИ

   КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «3», затем содержащая n цифр «7» (10 < n < 1000).

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

Показать ответ и решение
for n in range(11, 1000):
    s = ’3’ + n * ’7’
    while ’37’ in s or ’577’ in s or ’7777’ in s:
        if ’37’ in s:
            s = s.replace(’37’,’7’,1)
        if ’577’ in s:
            s = s.replace(’577’,’73’,1)
        if ’7777’ in s:
            s = s.replace(’7777’,’5’,1)
    if sum(int(i) for i in s) == 57 and int(s[-1]) == 3:
        print(n)
        break

Ответ: 520

Ошибка.
Попробуйте повторить позже

Задача 24#85889Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (31) ИЛИ нашлось (11111) ИЛИ нашлось (144)

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

      ТО заменить (31, 4)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (11111, 33)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (144, 133)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «3», а затем содержащая n цифр «1» (5 < n < 1000).

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

Показать ответ и решение

Идея решения:

Мы переводим пошаговые действия исполнителя Редактор в программу на Python. Сначала организуем перебор значений n  в диапазоне от 6 до 999. Для каждого значения строим исходную строку: сначала символ "3 затем n  символов "1". Далее запускаем цикл while, который продолжается, пока строка содержит хотя бы одну из подстрок: 31 , 11111 или 144. Внутри цикла выполняем три проверки:

- если есть 31, то заменяем первое её вхождение слева на 4;

- если есть 11111, то заменяем первое её вхождение слева на 33;

- если есть 144, то заменяем первое её вхождение слева на 133.

Замены выполняем методом replace с параметром 1, чтобы изменялось только первое вхождение, как это делает исполнитель. После завершения цикла получаем строку, в которой уже нет указанных подстрок. Далее переводим все символы строки в числа и находим сумму цифр. Если эта сумма равна 160, то выводим найденное значение n  и завершаем перебор.

Решение:

# Перебираем все значения n от 6 до 999
for n in range(6, 1000):
    # Формируем исходную строку: "3" + n раз символ "1"
    s = "3" + n * "1"

    # Запускаем цикл, пока встречаются подстроки "31", "11111" или "144"
    while "31" in s or "11111" in s or "144" in s:
        # Если в строке есть "31", заменяем первое её вхождение на "4"
        s = s.replace("31", "4", 1)
        # Если в строке есть "11111", заменяем первое её вхождение на "33"
        s = s.replace("11111", "33", 1)
        # Если в строке есть "144", заменяем первое её вхождение на "133"
        s = s.replace("144", "133", 1)

    # Находим сумму всех цифр полученной строки
    if sum(map(int, s)) == 160:
        # Если сумма равна 160, выводим n
        print(n)
        # Прерываем цикл, так как решение найдено
        break

Ответ: 135

Ошибка.
Попробуйте повторить позже

Задача 25#85890Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (74) ИЛИ нашлось (5444) ИЛИ нашлось (444)

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

      ТО заменить (74, 44)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (5444, 477)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (444, 55)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «7», а затем содержащая n цифр «4» (4 < n < 1000).

Определите минимальное значение n, при котором в результате выполнения программы строка будет содержать 20 цифр «7».

Показать ответ и решение
for n in range(5, 1000):
    s = ’7’+n*’4’
    while ’74’ in s or ’5444’ in s or ’444’ in s:
        s = s.replace(’74’, ’44’, 1)
        s = s.replace(’5444’, ’477’, 1)
        s = s.replace(’444’, ’55’, 1)
    if s.count(’7’) == 20:
        print(n)

Ответ: 59

Ошибка.
Попробуйте повторить позже

Задача 26#85891Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (055) ИЛИ нашлось (65) ИЛИ нашлось (5555)

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

      ТО заменить (055, 56)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (65, 5)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (5555, 000)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (00000, 6)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, содержащая n цифр «5» и заканчивающаяся цифрой «0» (3 < n < 2500).

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

Показать ответ и решение
a = set()  # Создаём множество для сумм цифр
for n in range(4, 2500):  # Перебираем количество символов ’5’
    s = n * ’5’ + ’0’  # Получаем строку

    # Осуществляем алгоритм
    while (’055’ in s) or (’65’ in s) or (’5555’ in s):
        if ’055’ in s:
            s = s.replace(’055’, ’56’, 1)
        if ’65’ in s:
            s = s.replace(’65’, ’5’, 1)
        if ’5555’ in s:
            s = s.replace(’5555’, ’000’, 1)
        if ’00000’ in s:
            s = s.replace(’00000’, ’6’, 1)

    a.add(sum(map(int, s)))  # В множество добавляем сумму цифр строки
print(max(a))  # Выводим максимальную сумму цифр

Ответ: 15

Ошибка.
Попробуйте повторить позже

Задача 27#85892Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (4888) ИЛИ нашлось (888) ИЛИ нашлось (49)

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

      ТО заменить (4888, 944)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (888, 9)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (49, 4)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры 4, а затем n подряд идущих цифр 8 (n ∈ (357;499]  и n  – четное). Определите наибольшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, кратна 37.

Показать ответ и решение
for n in range(358,500,2):
    s = ’4’+’8’*n
    while ’4888’ in s or ’888’ in s or ’49’ in s:
        if ’4888’ in s:
            s = s.replace(’4888’,’944’,1)
        if ’888’ in s:
            s = s.replace(’888’,’9’,1)
        if ’49’ in s:
            s = s.replace(’49’,’4’,1)
    if sum(map(int,s)) % 37 == 0:
        print(n)

Ответ: 494

Ошибка.
Попробуйте повторить позже

Задача 28#85893Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (333) ИЛИ нашлось (13) ИЛИ нашлось (12)

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

      ТО заменить (333, 21)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (13, 32)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (12, 11)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «1», а затем содержащая n цифр «2» и n цифр «3».

Определите минимальное значение n (n ∈ [200;500]  и n  - четное), при котором в результате выполнения программы строка будет содержать ровно 106 цифр «3».

Показать ответ и решение
for n in range(200, 501, 2):
    s =  ’1’ + n*’2’  + n*’3’
    while ’333’ in s or ’13’ in s or ’12’ in s:
        s = s.replace(’333’, ’21’, 1)
        s = s.replace(’13’, ’32’, 1)
        s = s.replace(’12’, ’11’, 1)
    if s.count(’3’) == 106:
        print(n)

Ответ: 418

Ошибка.
Попробуйте повторить позже

Задача 29#85894Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (666) ИЛИ нашлось (333)

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

      ТО заменить (666, 33)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (333, 6)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «3», а затем содержащая n цифр «6» (5 < n < 1000  ).

Определите минимальное трехзначное значение n, при котором в результате выполнения программы значение числа в строке будет кратно 11 и не кратно 6.

Показать ответ и решение
for n in range(100, 1000):
    s =  ’3’ + n*’6’
    while ’666’ in s or ’333’ in s:
        s = s.replace(’666’, ’33’, 1)
        s = s.replace(’333’, ’6’, 1)
    if int(s) % 11 == 0 and int(s) % 6 != 0:
        print(n)

Ответ: 103

Ошибка.
Попробуйте повторить позже

Задача 30#85895Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (2222) ИЛИ нашлось (333)

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

      ТО заменить (2222, 3)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (333, 23)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, содержащая n цифр «2» (5 < n < 1000  ).

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

Показать ответ и решение
for n in range(6, 1000):
    s =  n*’2’
    while ’2222’ in s or ’333’ in s:
        s = s.replace(’2222’, ’3’, 1)
        s = s.replace(’333’, ’23’, 1)
    if s.count(’2’) < s.count(’3’):
        print(n)

Ответ: 996

Ошибка.
Попробуйте повторить позже

Задача 31#85896Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (92) ИЛИ нашлось (252) ИЛИ нашлось (222) ИЛИ нашлось (7777)

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

      ТО заменить (92, 25)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (252, 7)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (222, 79)

   КОНЕЦ ЕСЛИ

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

      ТО заменить (7777, 29)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «9», а затем содержащая n цифр «2» (200 < n < 850  ).

Определите наибольшее значение n, при котором в результате выполнения программы значение числа в строке будет оканчиваться на «79».

Показать ответ и решение
for n in range(201, 850):
    s =  ’9’ + n*’2’
    while ’92’ in s or ’252’ in s or ’222’ in s or ’7777’ in s:
        s = s.replace(’92’, ’25’, 1)
        s = s.replace(’252’, ’7’, 1)
        s = s.replace(’222’, ’79’, 1)
        s = s.replace(’7777’, ’29’, 1)
    if int(s) % 100 == 79:
        print(n)

Ответ: 845

Ошибка.
Попробуйте повторить позже

Задача 32#85897Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

ПОКА нашлось (14) ИЛИ нашлось (444) ИЛИ нашлось (22444)

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

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

   КОНЕЦ ЕСЛИ

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

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

   КОНЕЦ ЕСЛИ

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

      ТО заменить (22444, 411)

   КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «1», а затем содержащая n цифр «4» (10 < n < 1000  ).

Определите наибольшее значение n, при котором в результате выполнения программы в строке будет находится хотя бы одна цифра «1», а также не более 50 цифр «2».

Показать ответ и решение
for n in range(11, 1000):
    s =  ’1’ + n*’4’
    while ’14’ in s or ’444’ in s or ’22444’ in s:
        s = s.replace(’14’, ’22’, 1)
        s = s.replace(’444’, ’1’, 1)
        s = s.replace(’22444’, ’411’, 1)
    if ’1’ in s and s.count(’2’) <= 50:
        print(n)

Ответ: 100

Ошибка.
Попробуйте повторить позже

Задача 33#85898Максимум баллов за задание: 1

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

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

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

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

НАЧАЛО

   ПОКА нашлось (666) ИЛИ нашлось (000)

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

         ТО заменить (666, 00)

       ИНАЧЕ заменить (000, 6)

      КОНЕЦ ЕСЛИ

   КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «6», а затем содержащая n цифр «0» (10 < n < 1050  ).

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

Показать ответ и решение
for n in range(11, 1050):
    s =  ’6’ + n*’0’
    while ’666’ in s or ’000’ in s:
        if ’666’ in s:
            s = s.replace(’666’, ’00’, 1)
        else:
            s = s.replace(’000’, ’6’, 1)
    if ’0’ not in s and len(s) > 1:
        print(n)

Ответ: 1046
Рулетка
Вы можете получить скидку в рулетке!