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

Разбор демоверсии ЕГЭ по информатике 2022 (22-27 Задание)



Продолжаем анализ демонстрационного варианта ЕГЭ по информатике 2022.


В этой статье разберём с 22-ого по 27 задание.


Источник задач: https://fipi.ru/ege/demoversii-specifikacii-kodifikatory#!/tab/151883967-5.


ЕГЭ по информатике 2022 будет повержено!



Разбор демоверсии ЕГЭ по информатике 2022 (1-5 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (6-10 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (11-15 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (16-21 Задание)

Задание 22

Ниже на четырёх языках программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 4, а потом 5.


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


Решение:

Решение данного задания будет похоже на решение 6 задания из ЕГЭ по информатике 2022.


С помощью перебора на языке Python найдём при каких значениях переменная L=4 И переменная M=5 в конце программы.


for i in range(1, 1000):
    X=i
    Q=9
    L=0
    while X >= Q:
        L = L + 1
        X = X - Q
    M=X
    if M < L:
        M = L
        L = X
    if L==4 and M==5: print(i)

Наибольшее значение равно 49.


Ответ: 49

Смотреть 22 Задание на YouTube




Задание 23

Исполнитель преобразует число на экране.

У исполнителя есть две команды, которым присвоены номера:

    
  1. Прибавить 1
  2. Умножить на 2

Программа для исполнителя – это последовательность команд. Сколько существует программ, для которых при исходном числе 1 результатом является число 20, и при этом траектория вычислений содержит число 10?

Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 16, 17.



Решение:

Решим задачу c помощью шаблона на языке Python.


def F(x, y):
    if x == y: return 1

    if x > y: return 0

    if x < y: return F(x+1, y) + F(x*2, y)

print(F(1, 10)*F(10, 20))

Число x, это то число, с которым мы работаем. Число y - это куда нужно прийти.


Если число x достигло пункта назначения, то возвращаем 1. Если оно перескочило y, то возвращаем 0. А если ещё не дошло до y, то продолжаем вычисления с помощью рекурсии.


У нас число 10 обязательное, поэтому разбиваем функцию следующим образом F(1, 10)*F(10, 20), через умножение. Это и будет ответ. Получается 28.


Ответ: 28

Смотреть 23 Задание на YouTube




Задание 24

Текстовый файл состоит из символов P, Q, R и S.

Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых нет идущих подряд символов P. Для выполнения этого задания следует написать программу.



Решение:

Напишем решение на языке Python.


f=open('24.txt')
s=f.read()
count=1
mx=0

for i in range(0, len(s)-1):
    if s[i]=='P' and s[i+1]=='P':
        count=1
    else:
        count=count+1
        mx = max(mx, count)

print(mx)

Подсчитываем символы, пока не встретилась комбинация двух P подряд. Как только встретилась данная комбинация, сбрасываем счётчик на 1. Здесь мы сбрасываем счётчик на значение 1, чтобы учесть один символ, которые находится в самой комбинации PP. И в начале мы тоже устанавливаем счётчик в значение 1 по этой же причине.


ЕГЭ по информатике демоверсия 2022 - задание 24 решение

Мы проходим в цикле for до длины строки минус один. Значение 1 в счётчике при сбросе и в начале программы так же компенсирует и тот момент, что мы не подсчитываем последний символ!


При изменении счётчика, сохраняем максимальное значение в переменной mx


Если бы у нас была вместо PP другая комбинация, состоящая к примеру из 5 символов, то мы бы тогда в начале и при сбросе писали в счётчик значение 5-1=4.


В этой задаче получается ответ 188.


Ответ: 188

Смотреть 24 Задание на YouTube


Задание 25

Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение M считается равным нулю.


Напишите программу, которая перебирает целые числа, бо́льшие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 8. Выведите первые пять найденных чисел и соответствующие им значения M.


Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение М. Строки выводятся в порядке возрастания найденных чисел.


Количество строк в таблице для ответа избыточно.


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


Решение:

На ЕГЭ по информатике 2022 удобно писать программы на языке Python.


import math
count=0
for i in range(700001, 800000):

    b=0
    
    for j in range(2, int(math.sqrt(i)) + 1):
        if i%j==0:
            b=round(i/j)
            break
    
    
    if  b==0: M=0
    else: M=j+b

    if M!=0 and M%10==8:
        count=count+1
        print(i, M)

    if count==5: break

В данной программе перебираются числа в цикле for, начиная с 700001.


Переменная b-считается наибольшим делителем числа i. Затем, с помощью ещё одного цикла for перебираются числа с 2 до корня числа i (включительно). Ищем тем самым наименьший делитель.


Если до корня числа включительно не встретился ни один делитель, значит, у числа нет делителей, кроме 1 и самого числа.



ЕГЭ по информатике демоверсия 2022 - задание 25 поиск делителей

Пусть у нас есть число A. Если у этого числа есть делитель d1, то он находится до корня этого числа. А вот то число (так же делитель), на которое умножается это число d1, чтобы получить A, будет находиться после корня A.


Получается, что у каждого делителя есть своя пара. У единицы - это само число. Причём один делитель из пары находится до корня, другой после корня. Исключением будет тот случай, когда из числа А извлекается целый корень. Тогда для этого корня не будет пары (парой и будет само это число √A * √A = A).


Таким образом, первый найденный делитель будет являться наименьшим делителем. А вот делительный, который находится в паре с наименьшим делителем, будет наибольшим.


После того, как мы нашли наименьший делитель (он будет сидеть в переменной j) и наибольший делитель b, выходим из второго цикла for.


Если переменная b осталась равна нулю, то, значит, у числа i нет указанных делителей, и переменная M должна равняться 0. Если b не равна нулю, то M=j+b.


Проверить, на что оканчивается число, можно узнав остаток от деления числа на 10.


Переменная count следит, чтобы было распечатано ровно 5 чисел, которые удовлетворяют условию задачи.


Ответ:
700005233338
700007100008
700012350008
700015140008
70003124168


Смотреть 25 Задание на YouTube


Задание 26

Системный администратор раз в неделю создаёт архив пользовательских файлов. Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов.

Известно, какой объём занимает файл каждого пользователя.

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


Входные данные.

В первой строке входного файла находятся два числа: S – размер свободного места на диске (натуральное число, не превышающее 10 000) и N – количество пользователей (натуральное число, не превышающее 1000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое – в отдельной строке.

Запишите в ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем – максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.


Пример входного файла:


100 4
80
30
50
40

При таких исходных данных можно сохранить файлы максимум двух пользователей. Возможные объёмы этих двух файлов – 30 и 40, 30 и 50 или 40 и 50. Наибольший объём файла из перечисленных пар – 50, поэтому ответ для приведённого примера:

2 50



Решение:

Решим задачу с помощью Excel. Чтобы открыть текстовый файл в программе Excel, выбираем Файл->Открыть, выбираем нужную папку и указываем, чтобы в папке были видны все типы файлов.


ЕГЭ по информатике демоверсия 2022 - задание 26 решение

И выбираем наш текстовый файл.


Выскочит окно Мастер текстов (импорт). Здесь оставляем выбранный пункт с разделителями и кликаем Далее.


В следующем окне поставим ещё галочку пробел. В итоге Символами-разделителем будут знак табуляции и пробел.


Кликаем ещё раз Далее и Готово.


Наши данные вставятся, как нужно!


ЕГЭ по информатике демоверсия 2022 - задание 26 решение 2

Число 8200 (размер свободного места) нужно запомнить или записать на черновике. Число 970 (количество файлов) нам в принципе не нужно при таком подходе решения.


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


1. Найдём максимальное количество файлов.

Выделяем весь столбец A и сортируем его по возрастанию.


ЕГЭ по информатике демоверсия 2022 - задание 26 решение 3

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


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

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


Получается максимальное количество файлов, которое можно сохранить, равно 568.


2. Найдём максимальный размер файла при максимальном количестве файлов.

Если мы сохраним максимальное количество файлов, то у нас ещё останется свободное место 8200-8176=24, т.к. сумма выделенных ячеек равна 8176.


Мы можем заменить наибольший файл (последняя выделенная ячейка равная 29) ещё большим файлом, размер которого не превышает 24+29=53.


Если покрутим таблицу вниз, то найдём такой файл размером 50. Это и будет наибольший файл при максимальном количестве файлов.


Ответ:
56850


Смотреть 26 Задание на YouTube


Задание 27

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 43. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.

Входные данные

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 10 000 000). Каждая из следующих N строк содержит одно натуральное число, не превышающее 10 000.

Пример организации исходных данных во входном файле:

7
1
3
4
93
8
5
95

В ответе укажите два числа: сначала значение искомой суммы для файла А, затем – для файла B.

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




Решение:

Напишем программу на Python.


f=open('27_B.txt')
n=int(f.readline())

sum_ost=[1096594666]*43 #Массив, который содержит минимальные суммы для разных остатков
k=[0]*43 #Запоминаем, при каком i сохранили в sum_ost очередную сумму.

mx=0 #Максимальная сумма нужной цепочки в данный момент времени
ln=0 #Длина нужной цепочки

s=0 #Сумма цепочки с первого до i-ого элемента

sum_ost[0]=0 #Для остатка ноль ничего от s отнимать не нужно
k[0]=-1  #Для остатка ноль индекс равен -1, чтобы правильно считалась длина цепочки


for i in range(n):
    x=int(f.readline())
    s = s + x
    ost = s % 43

    if s-sum_ost[ost]==mx:
        ln=min(ln, i - k[ost])

    if s-sum_ost[ost] > mx:
        mx = s - sum_ost[ost]
        ln = i - k[ost]
        
    if sum_ost[ost]==1096594666:
        sum_ost[ost] = s
        k[ost] = i
    
print(ln)

Переменная s - это сумма от первого до текущего элемента i. На каждом шаге вычисляется остаток от деления s на 43. И записывается в массив sum_ost эта сумма s для каждого остатка.


Тогда кандидатом для ответа будет цепочка, которая получается, если от цепочки с суммой s "отрезать" цепочку с суммой из массив sum_ost, которая соответствует текущему остатку (переменная ost).


ЕГЭ по информатике демоверсия 2022 - задание 27 решение

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


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


В процессе решения мы ищем среди кандидатов для ответа цепочку с максимальной суммой. Делаем это стандартным образом: кто больше, то и победил. Мы инициализируем большими числом 1096594666 элементы массива sum_ost для того, чтобы условие нормально сработало, когда в массиве sum_ost ещё нет суммы для данного остатка.


Так же мы сохраняем индексы элементов в массив k, когда записываем суммы для различных остатков в массив sum_ost. Это делается для того, чтобы можно было вычислить длину цепочки.


Для случая, когда остаток равен 0, устанавливаем сумму в массиве sum_ost равной нулю, потому что кандидатом на ответ будет цепочка от самого первого до i-ого элемента. Это, можно сказать, исключительный случай. И чтобы правильно вычислялась длина цепочки, для случая, когда остаток равен нулю, индекс в массив k делаем равным -1.


Ответ:
185329329


Разбор демоверсии ЕГЭ по информатике 2022 (1-5 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (6-10 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (11-15 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (16-21 Задание)


Смотреть 27 Задание на YouTube




07-09-2021 в 08:24:37





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

ЕГЭ по информатике 2021 - Задание 18 (Таблица чисел)

Привет! Мы добрались до 18 задания из ЕГЭ по информатике 2021....

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



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



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


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