Python ЕГЭ
1 subscriber
9 photos
1 link
Download Telegram
#Задание2

Условие:
Это задание включает определение соответствия каждой переменной (x, y, z, w) своему столбцу в таблице истинности логической функции F, выраженной как ((w → z) (¬ x → y)) → ((y ≡ w) (z ¬ x)).

Решение:
Для эффективного решения этой задачи есть два подхода: аналитический и программный. Для более удобного и быстрого выполнения рекомендуется использовать программный подход — он проще и быстрее.
#для удобства, выведем названия переменных
print('x y w z')
#переберем все возможные комбинации значений переменных
for x in range(2):
for y in range(2):
for w in range(2):
for z in range(2):
#для каждой из комбинаций вычислим значение функции
F = ((w <= z) and ( (not x) <= y)) <= (( y == w) or ( z and (not x) ))
#если функция ложна (по условию), выводим значения переменных
if F == 0: print(x, y, w, z)

@PythonEge
#Задание5

Условие:
Найти наибольшее число до 100 включительно, которое после обработки автоматом описанным алгоритмом останется неизменным.

Решение:
Дается число в определенном диапазоне, которое подвергается определенным преобразованиям, в результате чего получается новое число. Часто требуется найти число, которое после обработки удовлетворяет условиям задачи, либо найти максимальное/минимальное число после обработки, которое также соответствует условиям задачи.
#перебираем числа N
for n in range(1, 256):
#строим двоичную запись числа N([2:] срезом убираем прeфикс '0b'),
#с помощью команды zfill(),добавляем нули, чтобы сделать 8-ми битную запись, а после
#с помощью среза [:-1] убираем последнюю цифру, срезом [::-1] переворачиваем число
x = bin(n)[2:].zfill(8)[:-1][::-1]
#переводим число из 2 системы в 10
res = int(x, 2)
#проверяем условие, данное в задаче
if n == res and n < 100:
print(res)

@PythonEge
#Задание8

Условие:
Василий формирует 4-буквенные коды, используя буквы Г, Е, Р, О, Й. Каждая буква может повторяться любое количество раз, причем код не должен начинаться с буквы Й и должен содержать хотя бы одну гласную букву. Сколько уникальных кодов может создать Василий?

Решение:
Это задание можно выполнить различными способами: вручную и программно. Программное решение можно создать с использованием вложенных циклов или с помощью библиотеки itertools. Для данной задачи мы выберем самый простой и надежный путь, и будем использовать библиотеку itertools.
from itertools import product
count = 0 # Счётчик
for x in product('ГЕРОЙ', repeat = 4):
s = ''. join(x) #формируем слова
#если первая буква не Й и в слове есть хотя бы одна гласная
#увеличиваем счётчик
if s[0] != 'Й' and (s.count('Е') > 0 or s.count('О') > 0):
count += 1
print(count)

@PythonEge
#Задание12

Условие:
Предоставленная программа для исполнителя "Редактор" выглядит следующим образом:
НАЧАЛО
ПОКА нашлось (111)
заменить(111, 2)
заменить(222, 3)
заменить(333, 1)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка будет получена после применения этой программы к строке, состоящей из 130 единиц?

Решение:
Я выбрал исполнителя "Редактор" как наиболее вероятного кандидата для работы.
s = '1' * 130  #формирование строки из 130 единиц
while '111' in s: #пока нашлось 111
s = s.replace('111', '2', 1) #заменить 111 на 2 - ровно 1 замена
s = s.replace('222', '3', 1) #заменить 222 на 3 - ровно 1 замена
s = s.replace('333', '1', 1) #заменить 333 на 1 - ровно 1 замена
print(s) #вывод итоговой строки

@PythonEge
#Задание13

Условие:
При использовании IP-адреса узла 123.80.87.27 и маски сети 255.255.240.0, необходимо определить общее количество нулей в двоичной записи адреса сети, а затем записать ответ в виде десятичного числа.

Решение:
Часто встречающиеся задачи по работе с IP-адресами и их масками включают запросы о количестве нулей или единиц, находящихся в каждом байте маски.
#переводим IP-адрес узла в двоичный вид
print(bin(123)[2:].zfill(8), bin(80)[2:].zfill(8), bin(87)[2:].zfill(8), bin(27)[2:].zfill(8))
#переводим маску сети в двоичный вид
print(bin(255)[2:].zfill(8), bin(255)[2:].zfill(8), bin(240)[2:].zfill(8), bin(0)[2:].zfill(8))
#получим 8 двоичных чисел
#после чего
# 11111111 11111111 11110000 00000000 выполним поразрядную конъюнкцию
# 01111011 01010000 01010000 00000000 и получим новое число

@PythonEge
#Задание14

Условие:
Сколько раз число 6 встречается в записи значения выражения 7^103 - 6 × 7^70 + 3 × 7^57 - 98, представленном в семеричной системе счисления?

Решение:
Для успешного выполнения задания №14 важно знать принципы позиционных систем счисления, уметь выполнять конвертацию чисел из указанной системы счисления в десятичную и обратно.
#вычисляем значение выражения
num = 7 ** 103 - 6 * 7 ** 70 + 3 * 7 ** 57 - 98
s = ''
#переводим число num в 7ую СС
while num > 0:
s = str(num % 7) + s
num //= 7
#считаем, сколько раз встретилось число 6
print(s.count('6'))

@PythonEge
#Задание15

Условие:
На числовой прямой имеются два отрезка: P=[2,20] и Q=[15,25]. Необходимо найти минимальную длину отрезка A, при которой формула...

Решение:
В задании №15 наиболее часто требуются знания в области алгебры логики.
#создаем функцию для проверки условия
def f(x):
P = 2 <= x <= 20
Q = 15 <= x <= 25
A = a1 <= x <= a2
return ((not(A)) <= (not(P))) or Q
#создаем список со всеми возможными отрезками
m = float('inf')
ox = [i/4 for i in range(1 * 4, 30 * 4)]
#ищем минимальную длину отрезка
for a1, a2 in combinations(ox, 2):
if all(f(x) for x in ox):
m = min(m, a2 - a1)
print(round(m))

@PythonEge
#Задание16

Условие:
Задан алгоритм для вычисления значения функции F(n), где n - натуральное число, по следующим правилам:
F(n) равно n, если n < 11;
F(n) равно n + F(n – 1), если n >= 11.
Чему равно значение F(2024) – F(2021)?

Решение:
Экзаменаторы ожидают, что у нас будут знания по рекурсивным алгоритмам и умение использовать функции на языке программирования Python.
#создаем словарь, и заполняем первые 11 значений, так как f(x) = n, при n < 11
f = {x: x for x in range(11)}
#исходя из второго условия, когда х больше 10, заполняем наш словарь, взяв значения с запасом,
#до 2030(чтобы последнее число f[2024], точно вошло в наш словарь
for x in range(11, 2030):
f[x] = x + f[x - 1] #просто переписываем формулу из условия
#ищем значение выражения для данных функций
print(f[2024] - f[2021])

@PythonEge