В результате получилась строка 21 какое наименьшее количество единиц могло быть в исходной строке
Перейти к содержимому

В результате получилась строка 21 какое наименьшее количество единиц могло быть в исходной строке

ЕГЭ по информатике (задача 12 сколько 3 было, если получилась строка, содержащая 31 единицу, 24 двойки и 46 троек)

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

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

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

Решение на Pyton:

Решение через систему уравнений:

По условию задачи при замене могут получиться следующие конечные варианты:

02 -> 31 03 -> 3112 01 -> 311230

03 -> 12 01 -> 1230.

Т.е. 01 при замене даст одну «3», 02 — две «1», одну «2» и две «3», а 03 — одну «1», одну «2» и одну «3». Обозначим количество «1» в исходной строке как a, «2» — как b, «3» — как c, и составим систему уравнений:

ЕГЭ задача 12

Ответ: 17 цифр «3»

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

ЕГЭ, вопрос 12: Умение анализировать результат исполнения алгоритма

Проверяемые элементы содержания по спецификации (2021): Умение анализировать результат исполнения алгоритма.

Кодификатор 1.6.2/1.1.3. Уровень сложности П, 1 балл.

Время выполнения — 4 минуты.

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

Материал изучен полностью. Вопросительные знаки связаны с многолетним мусоленьем Робота. Он может быть заменен.

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

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

Замечание. Задачи этого типа активно используются для олимпиады в 7 классе.

Разбор варианта демоверсии 2017. Исполнитель Редактор
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 69 идущих подряд цифр 8? В ответе запишите полученную строку. Так как речь идет об анализе результатов многократной (разумно) обработки данных, имеет смысл расписать каждую итерацию (прохождения цикла).

Исходные данные.
Обрабатываются «кусочки строки» по 4 цифры, сразу преобразуем ее в смысловой вид: 17 раз по «8888» + «8» (далее 17*»8888″ + «8»).

1. Каждое «8888» заменится на «33». Итог: 17*»33″ + «8» или 8*»3333″+»338″.

2. Каждое «3333» заменится на «88». Итог: 8*»88″ + «338» или 4*»8888″+»338″.

3. Каждое «8888» заменится на «33». Итог: 4*»33″ + «338» или 2*»3333″+»338″.

4. Каждое «3333» заменится на «88». Итог: 2*»88″ + «338» или 1*»8888″+»338″.

5. «8888» заменится на «33». Итог: *»33″ + «338» или «3333»+»8″.

6. «3333» заменится на «88». Итог: «88» + «8» или «888». Так как знаков осталось три, цикл ПОКА и программа завершится

Строка «888» и будет ответом.

Запись можно значительно сократить, например, для первой строки:

Большинство источников предложит вам составить таблицу. Иногда это действительно нужно. Например, для нескольких переменных. Но, прежде чем составлять таблицу, приходится продумывать ее структуру, при ошибке — перечерчивать, а это — время, которого на экзамене нет. В конце-концов, можно начать запись в текстовом варианте, а, когда станет понятна таблица, перенести информацию в нее.

Можно ли этот примитив решить в уме? Нет, вы находитесь на экзамене и волнуетесь 🙂 Любой сбой заставит начать все сначала, а по записям это сделать проще и быстрее.

Задания

Описания исполнителей из заданий

  • Исполнитель Редактор.
    Получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
    А) заменить (v, w).
    Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
    заменить (111, 27)
    преобразует строку 05111150 в строку 0527150.
    Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
    Б) нашлось (v).
    Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
    Цикл выполняется, пока условие истинно. В конструкции выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
  • Исполнитель Чертёжник.
    Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (a, b), где a, b — целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x+a; y+b).
    Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на (2, −3) переместит Чертёжника в точку (6, −1).
    Цикл
    означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным).
  • Исполнитель Робот.
    Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, включает в себя 4 команды-приказа и 4 команды — проверки условия.
    Команды-приказы: вверх, вниз, влево, вправо.
    При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.
    Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится, и программа прервётся.
    Другие 4 команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:
    сверху свободно, снизу свободно, слева свободно, справа свободно.
    Цикл
    выполняется, пока условие истинно.
    В конструкции
    выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
  • Исполнитель Арифметик.
    На этом исполнителе показан пример записи/чтения программы для всех исполнителей аналогичного типа (производящих арифметические действия над числами).
    У исполнителя Арифметик две команды, которым присвоены номера:
    1. прибавь 2,
    2. умножь на 3.
    Первая из них увеличивает число на экране на 2, вторая утраивает его.
    Например, 21211 — это программа которая преобразует число 1 в число 19.
  • Исполнитель Квадратор.
    У исполнителя Квадратор две команды, которым присвоены номера:
    1. возведи в квадрат,
    2. прибавь 1.
    Первая из них возводит число на экране в квадрат, вторая увеличивает его на 1.
  • Исполнитель Утроитель.
    У исполнителя Утроитель две команды, которым присвоены номера:
    1. она может отличаться, см. в конкретных заданиях
    2. умножь на три
    Первая из них. вторая — утраивает число.
  • Исполнитель Калькулятор. Список команд различается. См. задания. Исполнитель
  • Исполнитель
    —>

Непосредственно задания

  1. Демо 2021 ().
  2. Демо 2020 (14). Исполнитель Редактор
    Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе запишите полученную строку.
  3. Демо 2019 (14). Исполнитель Редактор
    Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 82 идущих подряд цифр 1? В ответе запишите полученную строку.
  4. Демо 2018 (14). Исполнитель Чертёжник
    Чертёжнику был дан для исполнения следующий алгоритм (число повторений и величины смещения в первой из повторяемых команд неизвестны):
    В результате выполнения этого алгоритма Чертёжник возвращается в исходную точку. Какое наибольшее число повторений могло быть указано в конструкции «ПОВТОРИ … РАЗ»?
  5. D2018 (14). Исполнитель Редактор
    Определите количество нулей в строке, получившейся в результате применения приведённой ниже программы к входной строке, состоящей из единицы, за которой следуют 80 нулей подряд.
    В ответе запишите только количество нулей в получившейся строке.
  6. R2018 (14). Исполнитель Редактор
    Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из одной единицы и 75 стоящих справа от нее нулей? В ответе запишите сколько нулей будет в конечной строке.
  7. Демо 2017 (14). Исполнитель Редактор
    Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 69 идущих подряд цифр 8? В ответе запишите полученную строку.
  8. Демо 2016 (14). Исполнитель Редактор
    Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8?
    В ответе запишите полученную строку.
  9. Демо 2016 (6-2). Исполнитель Калькулятор
    У исполнителя Калькулятор две команды, которым присвоены номера:
    1. прибавь 2,
    2. умножь на 5.
    Выполняя первую из них, Калькулятор прибавляет к числу на экране 2, а выполняя вторую, умножает его на 5.
    Например, программа 2121 — это программа которая преобразует число 1 в число 37.
    Запишите порядок команд в программе, которая преобразует число 2 в число 24 и содержит не более четырёх команд. Указывайте лишь номера команд.
  10. Демо 2015 (14). Исполнитель Чертёжник
    Чертёжнику был дан для исполнения следующий алгоритм (буквами n, a, b обозначены неизвестные числа, при этом n > 1):
    Укажите наименьшее возможное значение числа n, для которого найдутся такие значения чисел a и b, что после выполнения программы Чертёжник возвратится в исходную точку.
  11. Демо 2014 (A13). Исполнитель Робот
    Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и остановится в закрашенной клетке (клетка А1)?
    1) 14; 2) 18; 3) 20; 4) 22.
  12. Демо 2014 (B1). Исполнитель Квадратор
    У исполнителя Квадратор две команды, которым присвоены номера:
    1. возведи в квадрат,
    2. прибавь 1.
    Первая из них возводит число на экране в квадрат, вторая увеличивает его на 1.
    Запишите порядок команд в программе, которая преобразует число 1 в число 10 и содержит не более 4 команд.
  13. Демо 2013 (A13). Исполнитель Робот
    Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и остановится в закрашенной клетке (клетка А1)?
    1) 8; 2) 12; 3) 17; 4) 21.
  14. Демо 2013 (B1). Исполнитель Арифметик
    Запишите порядок команд в программе преобразования числа 3 в число 69, содержащей не более 5 команд, указывая лишь номера команд. Если таких программ более одной, то запишите любую из них.
  15. Демо 2012 (A13). Исполнитель Робот
    Сколько клеток лабиринта соответствуют требованию, что, выполнив предложенную программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?
    1) 1; 2) 3; 3) 5; 4) 7.
  16. Демо 2012 (B2). Исполнитель Утроитель
    У исполнителя Утроитель две команды, которым присвоены номера:
    1. вычти 2
    2. умножь на три
    Первая из них уменьшает число на экране на 2, вторая — утраивает его.
    Запишите порядок команд в программе преобразования числа 1 в число 22, содержащей не более 5 команд, указывая лишь номера команд.
  17. Демо K-2012 (B8). Исполнитель Робот

Copyright © 1993–2022 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.

Информатика ЕГЭ 12 задание разбор

12-е задание: «Алгоритмы с циклами и условиями»
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 4 минуты.

Проверяемые элементы содержания: Умение анализировать результат исполнения алгоритма

Плейлист видеоразборов задания на YouTube:

Исполнитель Редактор и цепочки символов

📹 Учимся по видео (решения разного типа программным способом):

Какая строка получится?

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

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

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

  • Рассмотрим алгоритм: редактор будет выполнять команды только тогда, когда в строке встречается цепочка «12» или цепочка «333»;
  • если в строке есть «12», то тогда эта цепочка заменяется на «3»;
  • если в строке нет цепочки «12», но есть «333», то цепочка «333» заменяется на «3».
  • Теперь вернемся к условию нашей задачи. Условие цикла истинно, соответственно выполняем блок ЕСЛИ, т.е. делаем замену: в каждом из 40 чисел ‘123‘, заменяем 12 на 3. Получим 40 + 40 = 80 троек (40 троек было изначально и 40 добавилось);
  • Так как больше чисел 12 у нас не встречается, то работает блок ИНАЧЕ. Сколько раз можно заменить в 80 подряд идущих тройках три тройки на одну? 80 делим на 3 получаем 26 раз + 2 тройки в остатке. Итого осталось 28 троек;
  • Теперь из 28 троек сколько раз мы можем заменить три тройки на одну? 28 делим на 3 и получаем 9 раз + 1 тройка в остатке. Итого 10 троек;
  • Делаем то же самое: 10 делим на 3 получаем 3 раза + 1 тройка в остатке = 4 тройки
  • Последний раз делим 4 на 3, получаем 1 тройку + 1 = 2 тройки

Результат: 33

✎ Решение 2. Программное:
Pascalabc.net:

begin var s := ‘123’ * 40; while (’12’ in s) or (‘333′ in s) do begin if ’12’ in s then s := s.Replace(’12’, ‘3’, 1) else s := s.Replace(‘333’, ‘3’, 1); end; print(s); end.

begin var s := ‘123’*40; var p1 := Pos(’12’,s); var p2 := Pos(‘333’,s); while (p1 > 0) or (p2 > 0) do begin if p1 > 0 then begin Delete( s, p1, 2 ); Insert( ‘3’, s, p1 ); end else begin Delete( s, p2, 3 ); Insert( ‘3’, s, p2 ); end; p1 := Pos(’12’,s); p2 := Pos(‘333’,s); end; write(s); end.

s = 40*’123′ while "12" in s or "333" in s: if "12" in s: s = s.replace( "12", "3", 1 ) else: s = s.replace( "333", "3", 1 ) print(s)

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

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

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

Ответ: 22

  • Для удобства решения сначала сократим исходную цепочку до одной группы цифр:
  • Условие цикла истинно (ПОКА нашлось (12)), и условие в цикле истинно (ЕСЛИ нашлось (12)), значит, делаем замену: в первой группе цифр «1122«, заменяем 12 на 2:
  • Затем опять возвращаемся к условию цикла: условие цикла истинно (ПОКА нашлось (12)), и условие в цикле истинно (ЕСЛИ нашлось (12)), делаем опять замену: в первой группе цифр «122«, заменяем 12 на 2:
  • Таким образом, получаем, что за две итерации цикла (2 шага), одна группа цифр превращается в две двойки.
  • Поскольку по условию имеем 71 группу цифр, то, чтобы узнать сколько двоек мы получим в результате выполнения условия ЕСЛИ нашлось (12), нам необходимо 71 умножить на 2 (кол-во двоек, получаемых из одной группы цифр):
  • То есть в итоге работы цикла и условия ЕСЛИ нашлось (12) мы получили всего 142 двоек.
  • Теперь работает условие ИНАЧЕ заменить (222, 2). Из 142 двоек каждые три заменяем на одну. Чтобы рассчитать итоговое количество двоек, необходимо 142 разделить на 3 (т.е. сколько раз можно заменять тройки двоек на одну двойку). Делить необходимо до тех пор, пока работает условие ИНАЧЕ заменить (222, 2):
  • В итоге осталось 2 двойки.

✎ Решение 2. Программное:
Pascalabc.net:

begin var s := ‘1122’ * 71; while (’12’ in s) or (‘222′ in s) do begin if ’12’ in s then s := s.Replace(’12’, ‘2’, 1) else s := s.Replace(‘222’, ‘2’, 1); end; print(s); end.

begin var s := ‘1122’*71; var p1 := Pos(’12’,s); var p2 := Pos(‘222’,s); while (p1 > 0) or (p2 > 0) do begin if p1 > 0 then begin Delete( s, p1, 2 ); Insert( ‘2’, s, p1 ); end else begin Delete( s, p2, 3 ); Insert( ‘2’, s, p2 ); end; p1 := Pos(’12’,s); p2 := Pos(‘222’,s); end; write(s); end.

s = 71*’1122′ while "12" in s or "222" in s: if "12" in s: s = s.replace( "12", "2", 1 ) else: s = s.replace( "222", "2", 1 ) print(s)

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

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

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

  • Рассмотрим алгоритм: редактор будет выполнять команды только тогда, когда в строке встречается цепочка «99» или цепочка «777»;
  • если в строке есть «777», то тогда эта цепочка заменяется на «9»;
  • если в строке нет цепочки «777», но есть «99», то цепочка «99» заменяется на «7».
  • Теперь вернемся к условию нашей задачи. Условие цикла истинно, условие ЕСЛИ нашлось 777 тоже истинно, делаем замену:
  • сколько раз можно заменить в 200 семерках три семерки на одну девятку? 200 делим на 3 получаем 66 замен, т.е. 66 цифр «9» + 2 семерки в остатке;
  • После выполнения этих преобразований условие ЕСЛИ нашлось 777 ложно. Значит, выполняется блок ИНАЧЕ: Заменить 99 на 7:
  • [66 цифр «9»] + «77» -> «7» + [64 цифры «9»] + «77»:
  • «7» + [64 цифры «9»] + «77» -> «7» + «7» + [62 цифры «9»] + «77»:
  • «77» + [62 цифры «9»] + «77» -> «7» + «77» + [60 цифр «9»] + «77»:
  • Затем условие ЕСЛИ нашлось 777 опять становится истинным. Выполняется команда Заменить 777 на 9:
  • Вернулись к той же «картине», что и после первого пункта. За эти шаги произошли преобразования, заменившие 66 девяток на 61 девятку, т.е. количество цифр «9» уменьшилось на 5 раз, а две цифры «77» так и остались в конце общей цепочки.
  • Чтобы рассчитать итоговое количество цифр «9», необходимо понять, сколько раз можно вычитать из 61 по 5 девяток:
  • Таким образом, после выполнения алгоритма, остается одна цифра «9» (в остатке) и в конце так и останутся две семерки: 977 .

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

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

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

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

    ✎ Решение 1. Программное:
    Pascalabc.net:

begin var s := ‘3’ * 90 + ‘1’; while (‘331’ in s) or (‘166’ in s) do begin if ‘331’ in s then s := s.Replace(‘331′, ’16’, 1) else s := s.Replace(‘166′, ’31’, 1); end; print(s); end.

begin var s := ‘3’*90 + ‘1’; var p1 := Pos(‘331’,s); var p2 := Pos(‘166′,s); while (p1 > 0) or (p2 > 0) do begin if p1 > 0 then begin Delete( s, p1, 3 ); Insert( ’16’, s, p1 ); end else begin Delete( s, p2, 3 ); Insert( ’31’, s, p2 ); end; p1 := Pos(‘331’,s); p2 := Pos(‘166’,s); end; write(s); end.

s = 90*’3’+’1′ while "331" in s or "166" in s: if "331" in s: s = s.replace( "331", "16", 1 ) else: s = s.replace( "166", "31", 1 ) print(s)

Сколько удалено?

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

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

Б) нашлось ( v )
Дана программа для исполнителя Редактор:

Дана строка, состоящая из 500 цифр 5. Сколько пятёрок было удалено за время обработки строки по этой программе?

Ответ: 561

  • Выполним несколько итераций цикла ПОКА. Когда мы получим ту же самую последовательность цифр пять, за исключением их количества — остановимся:
  • Остановились, так как мы пришли к исходной последовательности цифр пять. Проанализируем действия программы за этот фрагмент выполнения: было удалено 9 пятерок и одна пятерка добавилась. Ключевой вывод: было удалено 9 пятерок.
  • Всего за выполнение этого фрагмента программы «ушло» 8 пятерок: 500 — 492 = 8 . Посчитаем, сколько раз можно выполнить данный фрагмент:
  • Т.е. 62 раза выполняется данный фрагмент и 4 цифр 5 еще остается (остаток = 4). Поскольку за одно выполнение фрагмента было удалено 9 цифр 5, посчитаем, сколько удалится за 62 выполнения:
  • 558 цифр 5 было удалено. Посмотрим выполнение программы над оставшимися 4 цифрами 5:
  • Итого получаем удаленных цифр 5:

✎ Решение 2. Программное:
Pascalabc.net:

begin var s := ‘5’ * 500; var k := 0; while (‘555’ in s) or (‘333’ in s) do begin if ‘333’ in s then s := s.Replace(‘333’, ‘5’, 1) else begin s := s.Replace(‘555’, ‘3’, 1); k += 3; end; end; print(k); end.

begin var k:= 0; var s := ‘5’*500 ; var p1 := Pos(‘555’,s); var p2 := Pos(‘333’,s); while (p1 > 0) or (p2 > 0) do begin if p2 > 0 then begin Delete( s, p2, 3 ); Insert( ‘5’, s, p2 ); end else begin Delete( s, p1, 3 ); Insert( ‘3’, s, p1 ); inc(k,3); end; p1 := Pos(‘555’,s); p2 := Pos(‘333’,s); end; write(k); end.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *