Шпаргалка по ЕГЭ по информатике

Базовые алгоритмы используемые в решении.

Задача 2

Шаблон задания

Логическая функция F задаётся выражением. Например ((x → y ) ≡ (z → w)) ∨ (x ∧ w).

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

Определите, какому столбцу таблицы истинности соответствует каждая из переменных xyzw.


print("x y z w")
for x in range(0,2):
    for y in range(0,2):
        for z in range(0,2):
            for w in range(0,2):
                if 'переведенное в язык Python условие':
                    print(x, y, z, w)

Правила перевода условия в язык Python:

Логическая операция python
Отрицание ¬ not()
Логическое умножение ∧ and
Логическое сложение ∨ or
Следование X ⟶ Y x <= y
Равносильность ≡ ==

Задача 5

5.1 Десятичное преобразование

Шаблон задания

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

1.  Складываются / вычитаются / умножаются определенные цифры числа

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

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


# Перебираем входные числа n
for n in range(0,100):
    # 1. Преобразовать число в строку, для получения цифр числа
    s = str(i)

    # 2. Из цифр получаем новые числа
    s1 = int(s[0]) + int(s[1])
    s2 = int(s[1]) + int(s[2])

    #3. Из полученных чисел строим выходное число соединяя их как строки
    r = str(s1) + str(s2)

    #4. Проверяем получили ли мы нужное нам выходное число r
    if r == '1111':
        # Сообщаем входное число n
        print(n)

5.2 Двоичное преобразование

Шаблон задания

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

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

2.  К этой записи дописываются справа / слева ещё цифры по определенному правилу:

а)  складывают / вычитаются цифры. Получают остаток от деления на 2;

б)  дописываются к двоичной записи числа слева или справа

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

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


# Перебираем входные числа N
for n in range(1,100):

    # 1. Переводим в двоичную запись и преобразовать число в строку, для получения цифр числа
    a = bin(i)[2:]
    s = str(a)

    # 2. Из цифр получаем двоичную запись нового число R (r_bin)
    k = 0
    for i in s:
        k = k + int(i)        
    s1 = str(k%2)
    r_bin = s + s1

    # 3. Получаем десятичную запись числа R
    r = int(r_bin,2)

    #4. Проверяем получили ли мы нужное нам выходное число r
    if r > 85:
        # Сообщаем входное число n
        print(n)  

Может потребоваться функция для удаления лидирующих нулей: s.strip(«0»)

Задача 6

6.1 Найти количество точек внутри фигуры

Шаблон задания

Черепахе был дан для исполнения следующий алгоритм:

Направо 315

Повтори 7 [Вперёд 16 Направо 45 Вперёд 8 Направо 135]

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


# Импортируем модуль черепашки
import turtle

# Устанавливаем максимальную скорость
turtle.tracer(0)

# Устанавливаем шаг. Его можно изменять если получается слишком маленький рисунок
step = 30

# Чертим рисунок исходя из условий задач
for i in range(4):
    # Вперед
    turtle.fd(10*step)
    # Влево
    turtle.lt(90)
    # Вправо
    turtle.rt(90)   


# Поднимаем перо и чертим координатную плоскость точками
turtle.up()
for x in range(-10,10):
    for y in range(-10,10):
        turtle.goto(x * step,y * step)
        # Устанавливаем размер точки
        turtle.dot(3)

6.2 Найти расстояние между начальным положением черепахи и конечным положением

Шаблон задания

Исполнитель Черепаха передвигается по плоскости и оставляет след в виде линии. Черепаха может выполнять две команды: Вперёд n (n  — число) и Направо m (m  — число). По команде Вперёд n Черепаха перемещается вперёд на n единиц. По команде Направо m Черепаха поворачивается на месте на m градусов по часовой стрелке, при этом соответственно меняется направление дальнейшего движения.

Запись Повтори k [Команда1 Команда2 … Команда S] означает, что заданная последовательность из S команд повторится k раз.

Черепаха выполнила следующую программу:

Повтори 11 [Вперёд 36 Направо 72].

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


# Импортируем модуль черепашки
import turtle

# Устанавливаем максимальную скорость
turtle.tracer(0)

# Получаем начальные координаты черепашки
x1 = turtle.xcor()
y1 = turtle.ycor()

# Чертим рисунок исходя из условий задач
for i in range(11):
    # Вперед
    turtle.fd(36)
    # Вправо
    turtle.rt(72)

# Получаем конечные координаты черепашки
x2 = turtle.xcor()
y2 = turtle.ycor()

# Определяем расстояние между двумя точками по теореме Пифагора
print(round(((x2 - x1)**2 + (y2 - y1)**2))**0.5)

Внимание
В задаче, где нужно найти расстояние переменную шаг не используем — это исказит результат

Задача 8

8.1 Слова по порядку

Шаблон задания

Все пятибуквенные слова, в составе которых могут быть только буквы Б, А, Т, Ы, Р, записаны в алфавитном порядке и пронумерованы начиная с 1.

Ниже приведено начало списка.

  1. ААААА
  2. ААААБ
  3. ААААР
  4. ААААТ
  5. ААААЫ
  6. АААБА

Под каким номером в списке идёт первое слово, которое не содержит ни одной буквы Ы и не содержит букв А, стоящих рядом?


s1 = 'батыр'
s = sorted(s1)
 
k = 0
 
for a1 in s:
    for a2 in s:
        for a3 in s:
            for a4 in s:
                for a5 in s:
 
                    k = k + 1 
                    b = a1 + a2 + a3 + a4 + a5

                    if 'условие из задачи':
                        print(k, '===', b)

8.2 Составление слов

Шаблон задания
Составляются коды из букв слова РОСОМАХА. Код должен состоять из 8 букв, и каждая буква в нём должна встречаться столько же раз, сколько в заданном слове. Кроме того, в коде не должны стоять рядом две гласные и две согласные буквы. Сколько кодов может составить Светлана?

s1 = 'росомаха'
s = sorted(s1)
 
k = 0

#Столько циклов сколько букв в получаемом слове 
for a1 in s:
    for a2 in s:
        for a3 in s:
            for a4 in s:
                for a5 in s:

                    b = a1 + a2 + a3 + a4 + a5

                    if 'условие':
                        k = k + 1
print(k) 

Задача 12

Шаблон задания

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

НАЧАЛО

  • ПОКА нашлось (49) ИЛИ нашлось (97)
  •     ЕСЛИ нашлось (47)
  •     ТО заменить (47, 74)
  •     КОНЕЦ ЕСЛИ
  • КОНЕЦ ПОКА
  • КОНЕЦ

На вход поступает строка, содержащая 30 цифр 7, 50 цифр 9, расположенных в произвольном порядке. Какая строка получается на выходе?


s = 30 * '7' + 50 * '9'
print(s)
while ('49' in s) or ('97' in s):
    if '47' in s:
        s = s.replace('47','74',1)   
print(s)

=====
Задача 25

Шаблон числа

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

– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 1?2157*4, делящиеся на 2024 без остатка.

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

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


from fnmatch import *

for i in range(2024, 10**10+1, 2024):
    if fnmatch(str(i), '1?2157*4'):
        print(i, i//2024)