вентилятор
Хорошего настроения!

ЕГЭ по информатике 2022 - Задание 5 (Линейный алгоритм)



Привет! В этой статье будут различные примеры решения задач из 5-ого задания ЕГЭ по информатике 2022.


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


Рассмотрим классический пример.





Задача (Классическая)

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R по следующему принципу.

1) Строится двоичная запись числа N.
2) К этой записи дописываются справа ещё два разряда по следующему правилу:
а) Складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописываются в конец числа (справа). Например, запись 11100 преобразуется в запись 111001.
б) Над этой записью производятся те же действия - справа дописывается остаток от деления суммы цифр на 2.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

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


Решение:

Решение на Python.


for n in range(1, 1000):
    s=format(n, 'b')
    s=s+str(s.count('1')%2)
    s=s+str(s.count('1')%2)
    r=int(s, 2)
    if r>42:
        print(r)

Программа будет выводить различные числа, но нас интересует самое маленькое. В ответе получается 46. Чтобы остановить поток чисел, можно нажать сочетание Ctrl + C.


В программе перебираем натуральные числа от 1 до 1000 с помощью цикла for. Каждое число подставляем в описанный алгоритм, в надежде получить в результате число r, удовлетворяющие условию задачи.





С помощью функции format переводим число n в двоичный вид. Получаем результат в виде строки s.


Чтобы найти сумму цифр получившейся двоичной записи, достаточно подсчитать количество единиц в строке s. Ведь только единицы в двоичной записи дают в сумму результат. Это можно сделать, применив функцию .count() к строке s.


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



Повторяем пункт Б, скопировав строку с пунктом А.


Чтобы обратно превратить строку двоичной записи в десятичное число, используем функцию int(), указав параметр 2.


В конце программы пропишем условие. Если r больше 42, то будем печатать эти значения. Остаётся выбрать минимальное число r.


Решение с помощью рассуждений.


Алгоритму на вход приходит обычное натуральное число N.





Это число преобразуется в двоичную запись (пункт 1).


ЕГЭ по информатике 2022 - задание 5 (Представление числа в двоичной форме)

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


ЕГЭ по информатике 2022 - задание 5 (Представление числа в двоичной форме)


Про 1 дополнительный разряд указано в подпункте а): "Складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописываются в конец числа (справа). Например, запись 11100 преобразуется в запись 111001."



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





Со вторым дополнительным разрядом происходит всё тоже самое, что и с первым разрядом, только когда подсчитываем количество единиц, мы так же подсчитываем и в 1-ом дополнительном разряде.


В вопросе просят указать входящее наименьшее число N, чтобы автомат выдал число R больше 42.


Возьмём наименьшее число, которое больше 42 (т.е. 43) и переведём его в двоичную систему. Это можно сделать с помощью стандартного windows калькулятора.


Вызываем калькулятор, выбираем Вид->Программист. Кликаем на отметку Dec (это означает, что мы находимся в десятичной системе) и набираем число 43. Затем кликаем на отметку Bin


ЕГЭ по информатике 2022 - задание 5 (Переводим в двоичную систему с помощью калькулятора)


Проверим число 1010112. Может ли оно быть результатом работы нашего алгоритма?


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

Отделяем два дополнительных разряда справа. У нас, не считая двух дополнительных разрядов, количество единиц равно двум. Количество чётное, значит, в первом дополнительном разряде должен стоять 0. А у нас стоит 1.





Следовательно, число 1010112 не может являться результатом работы алгоритма. И это число не подходит.



Проверим последующие числа. На калькуляторе можно прибавлять по 1 и получать следующее число в двоичной системе. Мы проверяем последовательно числа, чтобы не пропустить самое маленькое число.


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

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


Количество единиц вместе с дополнительным разрядом равно 4. Число чётное, значит, во втором дополнительном разряде должен стоять 0. У нас и стоит во втором дополнительном разряде 0. Следовательно, число 1011102 подходит по всем правилам и является наименьшим.


В десятичной системе это число 46.


Ответ: 46



Рассмотрим ещё одну интересную задачу для подготовки к ЕГЭ по информатике 2022.


Задача(Замена символов)

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1) Строится двоичная запись числа N.
2) Каждый разряд этой записи заменяется двумя разрядами по следующему правилу: если в разряде стоит 0, то вместо него пишется 01; если в разряде стоит 1, то 1 заменяется на 10.
Например, двоичная запись 1010 числа 10 будет преобразована в 10011001.

Полученная таким образом запись (в ней в два раза больше разрядов, чем в записи исходного числа N) является двоичной записью искомого числа R.

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



Решение:

Решение на Python.


for n in range(1, 1000):
    s=format(n, 'b')
    s2=''
    for x in s:
        if x=='0':
            s2 = s2 + '01'
        else:
            s2 = s2 + '10'
    r=int(s2, 2)
    if r%2!=0 and r<256:
        print(r) 

Получается наибольшее число 169.


Здесь после того, как построена строка, содержащая двоичную запись числа n, мы с помощью цикла for перебираем каждый символ и анализируем его.





Предварительно создав переменную s2 для новой строки, мы записываем в неё '01', если анализируемый символ является нулём, и '10', если единицей.


Добавляем заменённые символы справа к строке s2, таким образом, самый первые символы окажутся постепенно слева, как положено.


Далее, делаем, как в прошлой задаче.



Решение с помощью рассуждений.


В этой задаче в начале строится двоичная запись числа N.


ЕГЭ по информатике 2022 - задание 5 (Представление числа в двоичной форме)

Каждый разряд превращается в два разряда! Единица превращается в 10. Ноль превращается в 01. На рисунке показан пример, как будет преобразовано число 10 = 10102.


ЕГЭ по информатике 2022 - задание 5 (Алгоритм перевода)

Оценим первое число, которое меньше, чем 256. Это число 255.


255 = 111111112




Здесь количество разрядов равно 8. Это чётное число, значит, такое количество разрядов может быть в результате работы алгоритма. Только чётное количество разрядов может получится в результате работы алгоритма.


В старших двух разрядах должны быть цифры 10, т.к. исходное число N не может начинаться с нуля.


В остальных парах попробуем написать 10, чтобы число было как можно больше.


Получается, что число 101010102 удовлетворяет всем правилам алгоритма, является наибольшим, и оно меньше 256.



Но важный момент, нас просили в ответ записать нечётное число.


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

В двоичной системе число, которое оканчивается на единицу, является нечётным.

Чтобы число было нечётным, изменим последние разряды на 01.


101010012 = 169

Ответ: 169

Набираем обороты в решении 5 задания из ЕГЭ по информатике 2022.





Задача(Классическая, закрепление)

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом.

1) Строится двоичная запись числа N.

2) К этой записи дописываются справа ещё два разряда по следующему правилу: если N чётное, в конце числа справа дописываются два нуля, в противном случае справа дописываются две единицы. Например, двоичная запись 1101 будет преобразована в 110111.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа - результата работы данного алгоритма.

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





Решение:

Решение на Python.


for n in range(1, 1000):
    s=format(n, 'b')
    
    if n%2==0:
        s=s+'00'
    else:
        s=s+'11'

    r=int(s, 2)
    if r>130:
        print(n)

Минимальное число n получается 33.


Обратите внимание, что здесь уже анализируем число n. Если оно чётное, то к переменной s справа дописываем '00', иначе '11'. Так же в этой задаче мы печатаем в ответе само число n.





Решение с помощью рассуждений.


После перевода в двоичную систему исходного числа N, алгоритм строит новое число по следующему правилу:


ЕГЭ по информатике 2022 - задание 5 (Алгоритм перевода 2)

Бордовым прямоугольником показаны дополнительные разряды.


Нужно найти минимальное число больше 130. Будем проверять последовательно числа, начиная с 131.


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


Подходит число 135. В ответе нужно указать число N. Отбросим от числа 100001112 дополнительные разряды и переведём в десятичную систему.


1000012 = 33

Ответ: 33



Похожие задачи встречались в сборнике С. С. Крылова для подготовке к ЕГЭ по информатике.


Задача (Крепкий орешек)

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1. Из числа N вычитается остаток от деления N на 4.

2. Строится двоичная запись полученного результата.

3. К это записи справа дописываются ещё два дополнительных разряда по следующему правилу:

а) Складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописываются в конец числа (справа). Например, запись 11100 преобразуется в запись 111001.

б) Над этой записью производятся те же действия - справа дописывается остаток от деления суммы цифр на 2.

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

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



Решение:

Первый способ. Число R должно быть меньше 47. Переведём число 46 в двоичную систему.


46 = 1011102

Результат от второго пункта не должен превышать 10112. Если результат от второго пункта будет превышать это число, то после добавления дополнительных разрядов получится число R, которое не меньше 47.


Проверим число 10112 = 11. Видим, что это число не может являться результатом пункта 2.


11 + 0 = 11 (остаток при делении 11 на 4 равен 3) -
11 + 1 = 12 (остаток при делении 12 на 4 равен 0) -
11 + 2 = 13 (остаток при делении 13 на 4 равен 1) -
11 + 3 = 14 (остаток при делении 13 на 4 равен 2) -


Здесь мы перебираем все остатки при делении на 4. Чтобы число 11 могло являться результатом пункта 2, число, помеченное зелёным цветом, должно совпадать с числом, помеченное оранжевым цветом. Стоит заметить, что если в первой строчке не совпадают числа, то и в остальных они тоже не совпадут. Верно и обратное. Если в первой строчке совпадут числа, то и для остальных остатков тоже числа будут совпадать.





Найдём, число, для которого будут совпадать эти числа, отмеченные зелёным и оранжевым цветом.


10 + 0 = 10 (остаток при делении 10 на 4 равен 2) Не подходит
9 + 0 = 9 (остаток при делении 9 на 4 равен 1) Не подходит
8 + 0 = 8 (остаток при делении 8 на 4 равен 0) Подходит!

Значит, число 8 нам подходит. Число 8 - это результат работы алгоритма в первом пункте. Нас просят найти максимальное число. Следовательно, возьмём остаток 3, чтобы исходное число N было как можно больше. Тогда N будет:


N = 8 + 3 = 11

Ответ получается 11.



Второй способ. Решим задачу с помощью Python'а.


Перебираем числа от 100 до 1 с помощью цикла for. Третий параметр "-1" в цикле for говорит о том, что мы перебираем числа в обратном порядке.


for i in range(100, 0, -1):
    n = i
    n = n - n % 4 # Выполняем первый пункт
    n = format(n, 'b') # Переводим в двоичную систему
    n = n + str(n.count('1') % 2) # Подпункт a) третьего пункта
    n = n + str(n.count('1') % 2) # Подпункт б) третьего пункта
    r = int(n, 2) # Переводим из двоичной системы в десятичную
    if r < 47:
        print(i)

В этой программе запрограммировали алгоритм, который указан в задаче. Если значение переменной r (результат работы алгоритма) меньше 47, то печатаем это значение на экран. Первое распечатанное число и есть ответ к задаче.





В переменную n по очереди подставляются числа из нашего диапазона (100-1). Команда % находит остаток от деления.


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


ЕГЭ по информатике 2022 - задание 5 (результат работы программы)

Ответ: 11



Задача (Демо 2023)

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.


1. Строится двоичная запись числа N.


2. Далее эта запись обрабатывается по следующему правилу:


a) если сумма цифр в двоичной записи числа чётная, то к этой записи справа дописывается 0, а затем два левых разряда заменяются на 10;

б) если сумма цифр в двоичной записи числа нечётная, то к этой записи справа дописывается 1, а затем два левых разряда заменяются на 11.


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


Например, для исходного числа 610 = 1102 результатом является число 10002 = 810, а для исходного числа 410 = 1002 результатом является число 11012 = 1310.


Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 40. В ответе запишите это число в десятичной системе счисления.


Решение:

for n in range(1, 1000):
    s=format(n, 'b')
    if s.count('1')%2==0:
        s = s + '0'
        s = '10' + s[2:]
    else:
        s = s + '1'
        s = '11' + s[2:]
    r=int(s, 2)

    if r>40:
        print(n)

Здесь мы пишем программу, как было написано в уроке видеокурса ЕГЭ по информатике. Но, действительно, встречается и новый приём. Нужно изменить левые символы нашей строки s. Это можно сделать с помощью такой конструкции s[2:]. Таким образом, мы берём всю строку, кроме двух первых символов. Например, s='football', то s[2:] будет обозначать 'otball'.


Повторим основные идеи такого подхода при решении пятого задания из ЕГЭ по информатике с помощью программирования. Перебираем числа от 1 до 999 с помощью цикла for. В этом диапазоне надеемся найти наш ответ. С помощью команды format() превращаем число в строку уже в двоичной системе. Сумма цифр в строке зависит только от количества единиц. Нули ничего не дают в сумму. Поэтому применяем функцию .count. Дальше всё делаем, как написано в условии задачи. Команда int(s, 2) превращает строку в двоичной системе в число опять в десятичной системе счисления.


Ответ: 16



Задача (Решаем с помощью Python)

Автомат обрабатывает натуральное число N > 1 по следующему алгоритму:


1) Строится двоичная запись числа N.
2) В конец записи (справа) дописывается вторая справа цифра двоичной записи.
3) В конец записи (справа) дописывается вторая слева цифра двоичной записи.
4) Результат переводится в десятичную систему.

Пример. Дано число N = 11. Алгоритм работает следующим образом.
1) Двоичная запись числа N: 11 = 10112
2) Вторая справа цифра 1, новая запись 101112.
3) Вторая слева цифра 0, новая запись 1011102.
4) Десятичное значение полученного числа 46.

При каком наименьшем числе N в результате работы алгоритма получится R > 170? В ответе запишите это число в десятичной системе счисления.


Решение:

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


for n in range(2, 1000):
    s=format(n, 'b')

    s=s+s[-2]
    s=s+s[1]

    r=int(s, 2)
    if r>170:
        print(n)

Получается наименьшее число 43. К последнему символу можем обратится s[-1], к предпоследнему s[-2]. Но счёт слева начинается с нуля. Первый символ это s[0], второй символ s[1] и т.д.


Обратите внимание, что перебирать числа n в этой задаче начинаем с 2.


Ответ: 43



Задача(Восьмибитное число)

Автомат обрабатывает натуральное число N (1≤N≤255) по следующему алгоритму:


1) Строится восьмибитная двоичная запись числа N.
2) Удаляется последняя цифра двоичной записи.
3) Запись «переворачивается», то есть читается справа налево.
4) Полученное число переводится в десятичную запись и выводится на экран.

Каково наибольшее число, меньшее 100, которое после обработки автоматом не изменится?



Решение:
for n in range(1, 256):
    s=format(n, 'b')

    # делаем 8-ое число
    while(len(s)<8):
        s='0'+s

    s=s[:-1] #удаляется последняя цифра
    s=s[::-1] #число переворачивается

    r=int(s, 2)
    if n<100 and r==n:
        print(n)

Ответ получается 90.





Восьмибитное число имеет длину 8 символов. После того, как перевели число n в двоичный вид, с помощью цикла while добисываем нули слева к строке s, пока длина этой строки меньше 8.


Удалить последнюю цифру можно с помощью конструкции s[:-1]. Здесь мы оставляем все цифры, начиная с первой до последней (не включительно).


Перевернуть строку можно с помощью конструкции s[::-1].


Далее решаем как обычно. Число не изменится, если входное число n равно выходному числу r.


Ответ: 90

Разберём задачу, которая была в пробном варианте от 3.02.23 в одном из регионов.


Задача(Пробник 3.02.23)

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.


1. Строится двоичная запись числа N.


2. Далее эта запись обрабатывается по следующему правилу:

a) если сумма цифр в двоичной записи числа чётная, то к этой записи справа дописывается 0, а затем два левых разряда заменяются на 1;

б) если сумма цифр в двоичной записи числа нечётная, то к этой записи справа дописывается 1, а затем два левых разряда заменяются на 11;


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


Например, для исходного числа 610 = 1102 результатом является число 1002 = 410, а для исходного числа 410 = 1002 результатом является число 11012 = 1310.


Укажите число N, после обработки которого с помощью этого алгоритма получается наименьшее значение R, большее 49. В ответе запишите это число в десятичной системе.





Решение:

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


for n in range(1, 1000):
    s=format(n, 'b')
    if s.count('1')%2==0:
        s = s + '0'
        s = '1' + s[2:]
    else:
        s = s + '1'
        s = '11' + s[2:]
    r=int(s, 2)
    if r>49:
        print(r, n)


Хитрость задачки заключается в том, что числа r возрастают неравномерно.


ЕГЭ по информатике 2023 - задание 5 (Пробник 3.02.23)

Нам необходимо глазами найти наименьше число r (первое число). Это число 50, а n для него равно 57.


При желании программу можно переписать следующим образом:


r_min=10**9
n_r_min = 0
for n in range(1, 1000):
    s=format(n, 'b')
    if s.count('1')%2==0:
        s = s + '0'
        s = '1' + s[2:]
    else:
        s = s + '1'
        s = '11' + s[2:]
    r=int(s, 2)
    if r > 49:
         if r < r_min:
            r_min=r
            n_r_min=n

print(n_r_min)

Здесь ищется минимальное число r автоматически и для него запоминается значение n, которое пойдет в ответ.


Ответ: 57



Боковой вариант 5-ого задания из ЕГЭ по информатике.


Задача (Лучше знать)

Автомат получает на вход четырёхзначное число. По этому числу строится новое число по следующим правилам:

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

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

Пример. Исходное число: 2465. Суммы: 2 * 4 = 8; 6 * 5 = 30. Результат: 308. Укажите наибольшее число, в результате обработки которого автомат выдаст число 124.



Решение:

В подобных задачах из ЕГЭ по информатике нумерация происходит начиная со старшего разряда.


ЕГЭ по информатике 2022 - задание 5 (нумерация цифр)

Первое правило можно представить следующим образом:


ЕГЭ по информатике 2022 - задание 5 (первое правило)




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


Проанализируем число 124.


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

Чтобы четырёхзначное число было наибольшим, выгодно, чтобы в старшем разряде стояла 9. Но, не у числа 12, не у числа 4, нет такого делителя. Какой наибольший делитель мы можем получить? Это число 6. Число 6 является делителем 12-ти. Значит, первая цифра будет 6, а вторая цифра будет 2 (6*2=12).


Рассмотрим второе число 4. Третий разряд тоже желательно сделать побольше. Значит, в четвёртый разряд поставим 4, а в младший разряд 1 (4*1=4).


Ответ получается 6241.


Ответ: 6241



Счастливых экзаменов! Видеоролик можете посмотреть ниже!








19-10-2021 в 12:31:01





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


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

ЕГЭ по информатике 2022 - Задание 22 (Не трудно!)

Сегодня посмотрим, что из себя представляет задание 22 из ЕГЭ по инфор...

Категория: Информатика  Подкатегория: ЕГЭ
Дата: 23-07-2022 в 10:12:35 2


Комментарии:

Второе задание с заменой символом пытался сделать через команду .replace, в консоль выводились почему-то только четные числа, можете обьяснить что не так? for unk in range(1, 1000): unk = (bin(unk)[2:]) if "1" in unk: unk = unk.replace("1", "10") elif "0" in unk: unk = unk.replace("0", "01") R = int(unk, 2) # if R < 256 and R % 2 != 0: print(R)
Дмитрий 15-02-2023 в 12:36:46

Я так понимаю, что вы заменяете либо единицы, либо нули. А нужно в одной записи заменить и единицы, и нули. Через реплейс тоже можно решить. s=s.replace('1', '2') s=s.replace('0', '01') s=s.replace('2', '10'). Т.е. мы превращаем 1 в символ, которого точно нет в строке, потом делаем замены.
Калужский Александр 15-02-2023 в 13:25:07



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



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


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




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