Главная Посты Курсы Связь О сайте

Демоверсия ЕГЭ по информатике 2023 (Задания 16-21)



Продолжаем решать демоверсию ЕГЭ по информатике 2023.


Условия задач были взяты с сайта: https://fipi.ru/ege/demoversii-specifikacii-kodifikatory#!/tab/151883967-5


В этой статье разберём задания 16-21 из демоверсии ЕГЭ по информатике 2023.



Демоверсия ЕГЭ по информатике 2023 (Задания 1-5)
Демоверсия ЕГЭ по информатике 2023 (Задания 6-10)
Демоверсия ЕГЭ по информатике 2023 (Задания 11-15)
Демоверсия ЕГЭ по информатике 2023 (Задания 22-27)



Задание 16

Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:


F(n) = 1 при n = 1;

F(n) = n × F(n − 1), если n > 1.


Чему равно значение выражения F(2023) / F(2020)?


Решение:

Если мы просто перепечатаем функцию, как мы делали на экзамене в 2022 году, то программа откажится это вычислять. Здесь слишком большая глубина рекурсии.


Тогда посмотрим внимательно на функцию. Оказывается это функция факториала. Это действие означает n! = 1*2*3*...*n.


F(2023) / F(2020) = (2023 * 2022 * 2021 * 2020!) / 2020! = 2023 * 2022 * 2021

Выражение 2020! просто сокращается. В ответе напишем 2023 * 2022 * 2021 = 8266912626.


Ответ: 8266912626



Задание 17

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых только одно число оканчивается на 3, а сумма квадратов элементов пары не меньше квадрата максимального элемента последовательности, оканчивающегося на 3. В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.



Решение:

В начале нужно найти максимальное число последовательности, оканчивающегося на 3.

f=open('17.txt')

mx=-10000

for s in f.readlines():
    x=int(s)
    if abs(x)%10==3:
        mx = max(mx, x)

print(mx)

Получается число 9973.


Напишем основную программу:

f=open('17.txt')

k=0
mx=0

n1=int(f.readline())

for s in f.readlines():
    n2=int(s)
    if ((abs(n1)%10==3) != (abs(n2)%10==3)) and (n1**2 + n2**2 >= 9973**2):
        k=k+1
        mx = max(mx, n1**2 + n2**2)
    n1=n2

print(k, mx)

Как решать подобные задачи было рассказано в видеокурсе.


Здесь нужно помнить, что числа отрицательные. Поэтому при нахождении последней цифры, нужно использовать функцию модуля abs.


Так же здесь интересное логическое выражение "в которых только одно число оканчивается на 3". Это операция xor - отрицание равносильности.


Ответ:
180190360573




Задание 18

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз – в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута Робота. Определите максимальную и минимальную денежные суммы, которые может собрать Робот, пройдя из левой верхней клетки в правую нижнюю. В ответе укажите два числа – сначала максимальную сумму, затем минимальную.

Исходные данные представляют собой электронную таблицу размером N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщенными линиями.

Пример входных данных:


1884
10113
13122
2356


Решение:

Открываем файл в программе Excel.


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


Мысленно представим пространство на 1 строчку ниже, чем область, где находятся числа. Это пространство будет таким же по размерам, как и область с числами. В этом пространстве и будет наше решение.


ЕГЭ по информатике реальный экзамен - задание 18 (Решение)

Отметим особым цветом те ячейки, которые "спрятаны" от движения Робота стенками.


ЕГЭ по информатике реальный экзамен - задание 18 (Закрашиваем клетки)

Для этих ячеек будем составлять другие формулы, в отличии от обычных ячеек.


Цвет ячейки можно поменять, нажав на кнопку "Цвет заливки" на главной вкладке программы.


Т.к. Робот направляется из левой верхней ячейки, то мы сначала и напишем формулу для этой ячейки. Пишем для ячейки B22:


=МАКС(B21;A22)+B1


Робот в любую ячейку может прийти либо сверху, либо слева. Для подсчёта максимального количества монет, мы должны выбрать максимальное предыдущее значение. Это и делаем формула. Плюс Робот должен взять монеты с текущей клетки.


Распространим формулу на всё пространство, не трогая закрашенные клетки.


ЕГЭ по информатике 2022 - задание 18 (Распространяем формулу)

Получается такая картина:


ЕГЭ по информатике 2022 - задание 18 (Распространяем формулу 2)

Для вертикальных подкрашенных полосок, Робот может попасть только сверху! Поэтому пишем формулу для ячейки, к примеру, для D23:


=D22+D2

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


В ячейки для горизонтально подкрашенных полосок, Робот может попасть только слева! Поэтому пишем формулу, к примеру, для ячейки E24:


=D24+E3

Распространяем формулу по всей закрашенной строчке. Алагоично делаем со всеми горизонтальными полосками.



В правом нижнем углу нашего рабочего пространства получается максимальное количество монет, которое может собрать Робот. В ячейке U41 получается число 1099.


Чтобы получить минимальную возможную сумму, в главной формуле функцию МАКС нужно заменить на МИН!


Удобно воспользоваться автоматической заменой через Ctrl+F.


ЕГЭ по информатике демоверсия 2022 - задание 18 (автоматическая замена)

Минимальная сумма равна 1026.


Ответ:
1099 1026




Задание 19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

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

В начальный момент в куче было S камней, 1 ≤ S ≤ 128.

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

Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.



Решение:

Решим задачу с помощью шаблона на языке программирования Python. Если хотите ознакомится с аналитическим решением задач на теорию игр, можете посмотреть мои статьи по 19 Заданию, 20 Заданию, 21 Заданию. Но с помощью шаблонов на экзамене решать быстрее и легче. Об этом подходе можете найти в видеокурсе.


Введём параметр p, который будет олицетворять позицию игры (ход).


Начальная позиция Ход Пети Ход Вани Ход Пети Ход Вани Ход Пети
p 1 2 3 4 5 6


def F(x, p):
    if x>=129 and p==3: return True
    if x<129 and p==3: return False
    if x>=129: return False

    if p%2==1:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)

for s in range(1, 129):
    if F(s, 1):
        print(s)

Заводим функцию F. Т.к. у нас одна куча, то она принимает параметры: x - количество камней в куче, p-позиция игры.


Дальше описываем победу. Если x>=29 и позиция равна 3 (1 Ход Вани), то возвращаем True, что означает победу.


Если, позиция уже равна 3, но камней меньше, чем должно быть для победы, то возвращаем False (проигрыш).


Третье условие. Если кто-то выиграл, но на первых двух условиях мы не вышли из функции, то, значит, выиграл не тот, кто нам нужен, следовательно, возвращаем Fasle.


Если мы не вышли на первых трёх условиях, то, значит, продолжаем прокручивать ходы, рекурсивно запускаем функцию F.


Для нечётных p (это ходы Вани), возвращаем разные ходы через and, т.к. он должен побеждать в любом случае. При этом увеличиваем на 1 значение p.


Для чётных p (это ходы Пети), возвращаем ходы через or.


В конце перебираем все возможные значения для s через цикл for, ищём те значения, которые подходят по условию задачи.


Ответ: 64



Задание 20

Для игры, описанной в задании 19, найдите два наименьших таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

− Петя не может выиграть за один ход;

− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.



Решение:

Задача точно такая же, как и в 19 задании, только теперь обязательно должен побежать Петя на своём втором ходу (p=4), при любой игре Вани.


Пишем тот же шаблон, немного отредактировав его.


def F(x, p):
    if x>=129 and p==4: return True
    if x<129 and p==4: return False
    if x>=129: return False

    if p%2==0:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)

for s in range(1, 129):
    if F(s, 1):
        print(s)

Получается 32 и 63.


Ответ:
32 63



Задание 21

Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:

− у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

− у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Если найдено несколько значений S, в ответе запишите минимальное из них.



Решение:

Опять используем прошлый шаблон, но немного модернизируем.


def F(x, p):
    if x>=129 and (p==3 or p==5): return True
    if x<129 and p==5: return False
    if x>=129: return False

    if p%2==1:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)


def F1(x, p):
    if x>=129 and p==3: return True
    if x<129 and p==3: return False
    if x>=129: return False

    if p%2==1:
        return F1(x+1, p+1) and F1(x*2, p+1)
    else:
         return F1(x+1, p+1) or F1(x*2, p+1)

for s in range(1, 129):
    if F(s, 1):
        print(s)

print()

for s in range(1, 129):
    if F1(s, 1):
        print(s)

Здесь Ваня должен выигрывать либо на первом своём ходе (p=3), либо на втором своём ходе (p=5).


Т.к. Ваня не должен гарантированно выиграть своим первым ходом, то мы создаём ещё одну функцию F1, похожую на основную функцию F, которая вычисляет, когда Ваня именно гарантированно выигрывает на своём первом ходе (p=3). И, затем, мы из тех чисел, которые получились в первой функции F, исключаем числа, которые получились во второй функции F1.


В первой функции получилось 62,64, а во второй 64. Получается ответ 62.


Ответ: 62

Демоверсия ЕГЭ по информатике 2023 (Задания 1-5)
Демоверсия ЕГЭ по информатике 2023 (Задания 6-10)
Демоверсия ЕГЭ по информатике 2023 (Задания 11-15)
Демоверсия ЕГЭ по информатике 2023 (Задания 22-27)






27-08-2022 в 18:24:33







Поддержать сайт:

Похожая статья:

ЕГЭ по информатике 2021 - Задание 23 (Опираемся на результаты предыдущих шагов)

Сегодня речь пойдёт о 23 задании из ЕГЭ по информатике 2021....

Категория: ЕГЭ  Подкатегория: -
Дата: 15-01-2018 в 16:47:34 0



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально: