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

12.01 Исполнитель «Редактор» – известная строка

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

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

ПОКА нашлось(55)  ИЛИ нашлось(7)

ПОКА нашлось(57)

заменить(57,5)

КОНЕЦ ПОКА

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

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой выше программы к строке: 5◟5..◝.◜55◞ 7◟7..◝.◜77◞.
   20      40

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 5(20)7(40).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех семерок, таким образом после выполнения этого цикла строка будет состоять из 20 пятерок.

Далее количество пятерок будет уменьшаться, пока не останется одна пятерка.

Решение программой

s = ’5’ * 20 + ’7’ * 40

while ’55’ in s or ’7’ in s:
    while ’57’ in s:
        s = s.replace(’57’, ’5’, 1)
    if ’55’ in s:
        s = s.replace(’55’, ’5’, 1)

print(s)


Ответ: 5

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

ПОКА нашлось(55)  ИЛИ нашлось(7)

ПОКА нашлось(57)

заменить(57,55)

КОНЕЦ ПОКА

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

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

ИНАЧЕ ЕСЛИ нашлось(7)

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Найдите сумму цифр в строке, полученной в результате применения приведённой выше программы к строке: 5◟5..◝.◜55◞7◟7-.◝.◜.77◞.
   35      100

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 5(35)7(100).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех семерок, таким образом после выполнения этого цикла строка будет состоять из 135 пятерок.

Далее все пятерки кроме последней исчезнут, а на их месте появятся семерки.

5(135) → 7(67)5(1)

После этого все семерки заменятся шестерками и программа завершит свою работу. В полученной строке 67 шестерок и 1 пятерка, сумма цифр равна 6 ⋅ 67 + 5 = 407

Решение программой

s = ’5’ * 35 + ’7’ * 100

while ’55’ in s or ’7’ in s:
    while ’57’ in s:
        s = s.replace(’57’, ’55’, 1)
    if ’55’ in s:
        s = s.replace(’55’, ’7’, 1)
    elif ’7’ in s:
        s = s.replace(’7’, ’6’, 1)

sum_of_digits = sum(int(digit) for digit in s)
print(sum_of_digits)



Ответ: 407

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

ПОКА нашлось(33)  ИЛИ нашлось(9)

ПОКА нашлось(39)

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

КОНЕЦ ПОКА

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

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

ИНАЧЕ ЕСЛИ нашлось(9)

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Найдите сумму цифр в строке, полученной в результате применения приведённой выше программы к строке: 3◟3..◝.◜33◞9◟9-.◝.◜.99◞.
   49      54

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 3(49)9(54).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех девяток, таким образом после выполнения этого цикла строка будет состоять из 103 троек.

Далее все тройки кроме последней исчезнут, а на их месте появятся девятки.

3(103) → 9(51)3(1)

После этого все девятки заменятся нулями и программа завершит свою работу. В полученной строке 51 ноль и 1 тройка, сумма цифр равна 3.

Решение программой

s = ’3’ * 49 + ’9’ * 54

while ’33’ in s or ’9’ in s:
    while ’39’ in s:
        s = s.replace(’39’, ’33’, 1)
    if ’33’ in s:
        s = s.replace(’33’, ’9’, 1)
    elif ’9’ in s:
        s = s.replace(’9’, ’0’, 1)

sum_of_digits = sum(int(digit) for digit in s)
print(sum_of_digits)


Ответ: 3

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

ПОКА нашлось(33)  ИЛИ нашлось(9)

ПОКА нашлось(39)

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

КОНЕЦ ПОКА

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

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

ИНАЧЕ ЕСЛИ нашлось(9)

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Определите количество преобладающих цифр в строке, полученной в результате применения приведённой выше программы к строке: 3◟3-.◝.◜.33◞9◟9-.◝.◜.99◞.
   93      312

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 3(93)9(312).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех девяток, таким образом после выполнения этого цикла строка будет состоять из 405 троек.

Далее все тройки кроме последней исчезнут, а на их месте появятся девятки.

3(405) → 9(202)3(1)

После этого все девятки заменятся нулями и программа завершит свою работу. В полученной строке 202 нуля.

Решение программой

s = ’3’ * 93 + ’9’ * 312

while ’33’ in s or ’9’ in s:
    while ’39’ in s:
        s = s.replace(’39’, ’33’, 1)
    if ’33’ in s:
        s = s.replace(’33’, ’9’, 1)
    elif ’9’ in s:
        s = s.replace(’9’, ’0’, 1)

count_0 = s.count(’0’)
count_9 = s.count(’9’)

if count_0 > count_9:
    print(count_0)
else:
    print(count_9)



Ответ: 202

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

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

ПОКА нашлось(12)

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

КОНЕЦ ПОКА

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

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

ИНАЧЕ ЕСЛИ нашлось(2)

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Найдите число, полученное в результате применения приведённой выше программы к строке: 1◟1..◝.◜11◞ 2◟2..◝.◜22◞.
   56      31  Ответ запишите в двоичной системе счисления.

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 1(56)2(31).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять из 87 единиц.

Далее все единицы кроме последней исчезнут, а на их месте появятся двойки.

1(87) → 2(43)1(1)

После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке 78 нулей и 1 единица. Если полученную строку нужно воспринимать как число, то незначащие нули неважны для записи числа, значит ответ 1, т.к. 110 = 12

Решение программой

s = ’1’ * 56 + ’2’ * 31

while ’11’ in s or ’2’ in s:
    while ’12’ in s:
        s = s.replace(’12’, ’11’, 1)
    if ’11’ in s:
        s = s.replace(’11’, ’2’, 1)
    elif ’2’ in s:
        s = s.replace(’2’, ’0’, 1)

binary_number = bin(int(s))[2:]
print(binary_number)


Ответ: 1

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

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

ПОКА нашлось(12)

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

КОНЕЦ ПОКА

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

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

ИНАЧЕ ЕСЛИ нашлось(2)

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Найдите число, полученное в результате применения приведённой выше программы к строке: 1◟1..◝.◜11◞ 2◟2..◝.◜22◞.
   39      14  Ответ запишите в двоичной системе счисления.

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 1(39)2(14).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять из 87 единиц.

Далее все единицы кроме последней исчезнут, а на их месте появятся двойки.

1(53) → 2(26)1(1)

После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке 26 нулей и 1 единица. Если полученную строку нужно воспринимать как число, то незначащие нули неважны для записи числа, значит ответ 1, т.к. 110 = 12

Решение программой

s = ’1’ * 39 + ’2’ * 14

while ’11’ in s or ’2’ in s:
    while ’12’ in s:
        s = s.replace(’12’, ’11’, 1)
    if ’11’ in s:
        s = s.replace(’11’, ’2’, 1)
    elif ’2’ in s:
        s = s.replace(’2’, ’0’, 1)

binary_number = bin(int(s))[2:]
print(binary_number)


Ответ: 1

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

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

ПОКА нашлось(12)

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

КОНЕЦ ПОКА

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

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

ИНАЧЕ ЕСЛИ нашлось(2)

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Сколько нулей содержится в строке, полученной в результате применения приведённой выше программы к строке: 1◟1-.◝.◜.11◞2◟2-.◝.◜.22◞.
   39      14

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 1(39)2(14).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять из 87 единиц.

Далее все единицы кроме последней исчезнут, а на их месте появятся двойки.

1(53) → 2(26)1(1)

После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке 26 нулей.

Решение программой

s = ’1’ * 39 + ’2’ * 14

while ’11’ in s or ’2’ in s:
    while ’12’ in s:
        s = s.replace(’12’, ’11’, 1)
    if ’11’ in s:
        s = s.replace(’11’, ’2’, 1)
    elif ’2’ in s:
        s = s.replace(’2’, ’0’, 1)

count_zeros = s.count(’0’)
print(count_zeros)


Ответ: 26

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

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

      ПОКА нашлось(12)

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

      КОНЕЦ ПОКА

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

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

      ИНАЧЕ ЕСЛИ нашлось(2)

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

      КОНЕЦ ЕСЛИ

   КОНЕЦ ПОКА

КОНЕЦ

Найдите произведение количества тех цифр, которых больше всего, и значения тех цифр, которых меньше всего в строке, полученной в результате применения приведённой выше программы к строке: 1◟1..◝.◜11◞ 2◟2..◝.◜22◞.
  231      70  Так, если программа вывела бы 60 пятерок и 10 четверок, то ответом было число 60 ⋅ 4 = 240.

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

Аналитическое решение

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A – цифра, которая находится в строке, а B – количество этих цифр.

Изначально была строка 1(231)2(70).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять из 301 единицы.

Далее все кроме последней единицы исчезнут, а на их месте появятся двойки.

1(301) → 2(150)1(1)

После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке 150 нулей и 1 единица. Больше всего нулей, меньше – единиц, ответ 150 ⋅ 1 = 150

Решение программой

s = 231 * ’1’ + 70 * ’2’  # Получаем строку
# Осуществляем алгоритм
while (’11’ in s) or (’2’ in s):
    while ’12’ in s:
        s = s.replace(’12’, ’11’, 1)
    if ’11’ in s:
        s = s.replace(’11’, ’2’, 1)
    elif ’2’ in s:
        s = s.replace(’2’, ’0’, 1)

maxCount = 0  # Максимальное количество цифр
digit = ’’  # Цифра, которая больше всего раз встречается в строке
for d in set(s):  # Перебор цифр (без повторений)
    if s.count(d) > maxCount:
        maxCount = s.count(d)
        digit = d

# Теперь нужно maxCount умножить на значения цифр, кроме digit
for d in set(s):
    if d != digit:
        maxCount *= int(d)  # Умножаем на числовое значение цифры

print(maxCount)  # Выводим результат

Ответ: 150

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

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

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

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

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

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

Дана программа для исполнителя Панцирь:

НАЧАЛО

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

ПОКА нашлось(32)

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

КОНЕЦ ПОКА

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

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

ИНАЧЕ ЕСЛИ нашлось(2)

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

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Найдите произведение количества тех цифр, которых больше всего, и значения тех цифр, которых меньше всего в строке, полученной в результате применения приведённой выше программы к строке: 3◟3..◝.◜33◞ 2◟2..◝.◜22◞.
  120      25  Так, если программа вывела бы 60 пятерок и 10 четверок, то ответом было число 60 ⋅ 4 = 240.

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

Решение руками

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,
 (B)  где A - цифра, которая находится в строке, а B - количество этих цифр.

Изначально была строка 3(120)2(25).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять из 145 троек.

Далее все кроме последней тройки исчезнут, а на их месте появятся двойки.

3(145) → 2(72)3(1)

После этого все двойки заменятся семерками и программа завершит свою работу. В полученной строке 72 семерки и 1 тройка. Больше всего семерок, меньше – троек, ответ 72 ⋅ 3 = 216.

Решение программой

s = ’3’ * 120 + ’2’ * 25

while ’33’ in s or ’2’ in s:
    while ’32’ in s:
        s = s.replace(’32’, ’33’, 1)
    if ’33’ in s:
        s = s.replace(’33’, ’2’, 1)
    elif ’2’ in s:
        s = s.replace(’2’, ’7’, 1)

count = {}
for digit in s:
    if digit in count:
        count[digit] += 1
    else:
        count[digit] = 1

max_count = -1
min_count = float(’inf’)
max_digit = ’’
min_digit = ’’

for digit, cnt in count.items():
    if cnt > max_count:
        max_count = cnt
        max_digit = digit
    if cnt < min_count:
        min_count = cnt
        min_digit = digit

result = max_count * int(min_digit)
print(result)


Ответ: 216

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

НАЧАЛО

   ПОКА нашлось(111)

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

   КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 111 идущих подряд цифр 1? В ответе запишите полученную строку.

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

Решение руками

Программа ищет три единицы в строке и заменяет их на две единицы. Значит за каждый шаг цикла из строки убирается одна единица (при условии что найдётся три единицы.) Тогда момент, когда уже близок конец цикла — строка 111. Из неё получается 11 после замены и программа больше не может зайти в цикл.

Решение программой

s = ’1’ * 111

while ’111’ in s:
    s = s.replace(’111’, ’11’, 1)

print(s)


Ответ: 11

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

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

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

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

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

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

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

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

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

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

Ц икл

   П ОК А усл овие

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

   К ОН ЕЦ ПО КА

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

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

Н АЧА ЛО

   П ОК А нашлось(123)

      зам енить(12,3)

   К ОН ЕЦ ПО КА

К ОНЕ Ц

Сколько троек будет содержать строка, которая получится в результате применения приведённой выше программы к строке, состоящей из 30  идущих подряд чисел 123  ? В ответе запишите только число — количество троек в полученной строке.

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

Решение руками

Программа на каждом шаге преобразовывает 123  в 33  . То есть каждая часть строки 123  становится 33  . Раз таких чисел было 30  подряд, то каждая из них превратилась в две тройки и в результате получилось 30⋅2 = 60  троек.

Решение программой

s = ’123’ * 30

while ’123’ in s:
    s = s.replace(’12’, ’3’, 1)

count_threes = s.count(’3’)
print(count_threes)


Ответ: 60

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

НАЧАЛО

   ПОКА нашлось(44) ИЛИ нашлось(55)

      заменить(44, 4)

      заменить(55, 5)

   КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 20 идущих подряд цифр 4, а затем 20 идущих подряд цифр 5? В ответе запишите полученную строку.

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

Решение руками

Мы имеем строку из двух частей — четверок слева и пятерок справа. На каждом шаге цикла мы убираем по одной четверке и пятерке. Крайнее состояние — 4455. Снова заходим в цикл и получаем 45. Больше в цикл зайти не можем.

Решение программой

s = ’4’ * 20 + ’5’ * 20

while ’44’ in s or ’55’ in s:
    s = s.replace(’44’, ’4’, 1)
    s = s.replace(’55’, ’5’, 1)

print(s)


Ответ: 45

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

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

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

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

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

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

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

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

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

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

Цикл

   П ОК А усл овие

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

   К ОН ЕЦ ПО КА

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

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

Н АЧА ЛО

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

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

      заменить(999,666)

      ИН АЧЕ

      заменить(666,6)

   К ОН ЕЦ ПО КА

К ОНЕ Ц

Известно, что в исходной строке сначала шли 3  цифры 6  , а затем 99  цифр 9  . Какая строка получится в результае работы приведенной выше программы? В ответ запишите только полученную строку.

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

Решение руками

Благодаря первому условию программа сначала заменит все девятки на шестерки (количество девяток кратно трем, поэтому их все заменят). Получаем строку из 102  шестерок.

После этого на каждом шаге три шестерки заменяются на одну. Значит за один шаг количество шестёрок уменьшается на 2  . Программа продолжает заменять до строки 6666  . После этого она в последний раз заходит в цикл и получает строку 66  .

Решение программой

s = ’6’ * 3 + ’9’ * 99

while ’666’ in s:
    if ’999’ in s:
        s = s.replace(’999’, ’666’, 1)
    else:
        s = s.replace(’666’, ’6’, 1)

print(s)


Ответ: 66

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

НАЧАЛО

   ПОКА (нашлось(38) И нашлось(83)) ИЛИ нашлось(39)

      заменить(383, 9)

      заменить(39, 6)

   КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате работы приведенной выше программы к строке, состоящей из 10 подряд идущих чисел 383? В ответ запишите полученную строку.

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

Решение руками

Программа заменяет все числа 383 на 9. Причем делает это с теми, что стоят левее, а значит 39 никогда не встретится и вторая замена никогда не случится.

Все 383 заменились на 9, а значит в итоге мы получаем десять девяток.

Решение программой

s = ’383’ * 10

while (’38’ in s and ’83’ in s) or ’39’ in s:
    s = s.replace(’383’, ’9’, 1)
    s = s.replace(’39’, ’6’, 1)

print(s)


Ответ: 9999999999

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

НАЧАЛО

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

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

      заменить (12, 3)

      ИНАЧЕ

      заменить (333, 3)

   КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 40 подряд идущих троек чисел 123? В ответе запишите полученную строку.

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

Решение 1

Благодаря замене 12 на 3 сначала все числа 123 перейдут в 33. А значит будет 40 * 2 = 80 троек.

За счет замены 333 на 3 за каждый шаг цикла из строки убирается 2 тройки пока находятся три тройки.

Переломный момент наступает когда строка становится 3333 и цикл срабатывает последний раз. Получается строка 33 и программа в цикл больше не зайдёт.

Решение 2

a = ’123’ * 40
while ’12’ in a or ’333’ in a:
    a = a.replace(’12’, ’3’, 1)
    a = a.replace(’333’, ’3’, 1)
print(a)

Ответ: 33

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

НАЧАЛО

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

      заменить(444, 3)

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

      заменить(333, 2)

   КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 44 идущих подряд цифр 4? В ответе запишите полученную строку.

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

Решение руками

Проделаем операции над строкой согласно программе и попробуем выявить закономерность.

Будем обозначать a
 (b)  повторение символа «a  » b  раз.

4(40) → 34(37) → 334(34) → 3334(31) → 24(31)

Получившаяся двойка больше не используется в программе, а значит девять четвёрок становятся одной двойкой.

Если продолжнить, то на каком-то шаге мы получим 222244444444. После замены два раза четвёрок на тройки мы получим 22223344 и программа больше не зайдёт в цикл.

Решение программой

s = ’4’ * 44

while ’4444’ in s or ’333’ in s:
    s = s.replace(’444’, ’3’, 1)
    if ’333’ in s:
        s = s.replace(’333’, ’2’, 1)

print(s)


Ответ: 22223344

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

   ПОКА нашлось(СОН) или нашлось(ПОН)

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

      заменить(С, П)

      ИНАЧЕ

      заменить(ПОНПОНПОН, КЛОН)

   КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 15 идущих подряд слов СОН? В ответе запишите полученную строку.

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

Решение руками

Благодаря первому условию все С заменяться на П и мы получим строку, состоящую из 15 идущих подряд слов ПОН.

После каждые три слова ПОН будут заменены на КЛОН. Значит мы получим 15 / 3 = 5 слов КЛОН.

Значит ответ — КЛОНКЛОНКЛОНКЛОНКЛОН.

Решение программой

s = ’СОН’ * 15

while ’СОН’ in s or ’ПОН’ in s:
    if ’С’ in s:
        s = s.replace(’С’, ’П’, 1)
    else:
        s = s.replace(’ПОНПОНПОН’, ’КЛОН’, 1)

print(s)


Ответ: КЛОНКЛОНКЛОНКЛОНКЛОН

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

НАЧАЛО

   ПОКА нашлось (2121) ИЛИ нашлось (111)

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

      заменить (2121, 2)

      ИНАЧЕ

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

   КОНЕЦ ПОКА

КОНЕЦ

Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 80 идущих подряд цифр 1? В ответе запишите полученную строку.

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

Решение руками

Попробуем проделать несколько итераций вручную и выявить закономерность.

Будем обозначать a
 (b)  повторение символа «a  » b  раз.

1(80) → 121(77) → 12121(74) → 121(73)

Как можно заметить, произошел переход 121(77) → 121(73)  , при котором были удалены четыре единицы.

С помощью этого перехода можно преобразовывать строку вплоть до состояния 1211111. Дальше три единицы заменяются, получаем строку 121211. После этого программа в последний раз зайдет в цикл и получит строку 121.

Решение программой

s = ’1’ * 80

while ’2121’ in s or ’111’ in s:
    if ’2121’ in s:
        s = s.replace(’2121’, ’2’, 1)
    else:
        s = s.replace(’111’, ’12’, 1)

print(s)



Ответ: 121

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

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

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

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

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

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

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

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

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

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

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

НАЧАЛО

   ПОКА нашлось(AB)

      заменить(A, BB)

      заменить(B, CCC)

      заменить(CCCCC, AB)

   КОНЕЦ ПОКА

КОНЕЦ

Сколько раз встретится буква C в строке, полученной после выполнения алгоритма выше для строки состоящей из последовательности букв ABC повторяющейся 30 раз? В ответ укажите только число.

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

Для решения этого задания напишем программу:

# Создаем исходную строку  
s = ’ABC’ * 30  
# Аналог пока нашлось(AB)  
while ’AB’ in s:  
    # Проводим замену по одному разу  
    s = s.replace(’A’, ’BB’, 1)  
    s = s.replace(’B’, ’CCC’, 1)  
    s = s.replace(’CCCCC’, ’AB’, 1)  
print(s.count(’C’)) # Вывод количества символов С в строке

Ответ: 62

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

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

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

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

Эта команда заменяет в строке первое слева вхождение последовательности v  на последовательность w.

Например, выполнение команды заменить (333,3)  преобразует строку 1333572  в строку 13572.

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

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

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

Строка исполнителя при этом не изменяется.

Цикл

   ПОКА условие

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

   КОНЕЦ ПОКА

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

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

   ЕСЛИ условие

      ТО команда1

   КОНЕЦ ЕСЛИ Выполняется команда1 (если условие истинно).

   ЕСЛИ условие

      ТО команда1

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

   КОНЕЦ ЕСЛИ Выполняется Выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Какая строка получится в результате применения приведённой ниже программы к строке: 1◟..◝.◜1 ◞?
  20

НАЧАЛО

   ПОКА нашлось(1)

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

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

      КОНЕЦ ЕСЛИ

   КОНЕЦ ПОКА

КОНЕЦ

Если вы получили строку вида 111222111  , то в ответе нужно записать 1(3)2(3)1(3)  , а для строки 11222  - 112(3)  , скобки ставятся при трех и более повторениях.

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

Аналитическое решение

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

Программное решение

s = ’1’ * 20
while ’1’ in s:
    if ’1’ in s:
        s = s.replace(’1’, ’0’, 1)
print(s)

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