Алгоритм вычисления значения функции F[n], где п - натуральное число, задан следующими соотношениями:
F(n) = 1 при n = 1
F(n) = 2 * n * F(n - 1), если п >1
Чему равно значение выражения (F(2024) - 4 * F(2023)) / F(2022) ?
from functools import *
@lru_cache(None)
def F(n):
if n == 1:
return 1
if n > 1:
return 2 * n * F(n - 1)
for i in range(2025):
F(i)
print((F(2024) - 4 * F(2023)) // F(2022))
# Ответ: 16362024
1.
from functools import *
Импорт модуля `functools`, который предоставляет несколько полезных функций, связанных с функциональным программированием.
2.
@lru_cache(None)
Декоратор `@lru_cache(None)`, который используется для кэширования результатов функции `F`, чтобы избежать повторных вычислений.
3.
def F(n):
Объявление функции `F` с аргументом `n`.
4.
if n == 1:
Проверка условия: если `n` равно 1.
5.
if n > 1:
Проверка условия: если `n` больше 1.
6.
return 2 * n * F(n - 1)
Возвращение результата умножения `2 * n` на рекурсивный вызов функции `F` с аргументом `(n - 1)`.
7.
for i in range(2025):
Цикл `for`, который проходит по значениям от 0 до 2024 (не включая 2025).
8.
F(i)
Вызов функции `F` для каждого значения `i` в диапазоне от 0 до 2024.
9.
print((F(2024) - 4 * F(2023)) // F(2022))
Вывод на экран результата выражения `(F(2024) - 4 * F(2023)) // F(2022)`, которое содержит вызовы функции `F` с различными аргументами.
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а] Если сумма цифр двоичной записи числа четная, то к этой записи справа дописывается 0, и затем два левых разряда двоичной записи заменяются на 10.
б) Если сумма цифр двоичной записи числа нечетная, то к этой записи справа дописывается 1, а затем два левых разряда двоичной записи заменяются на 11. Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 20.
R = []
for n in range(2000):
s = bin(n)[2:]
if s.count('1') % 2 == 0:
s = '10' + s[2:] + '0'
else:
s = '11' + s[2:] + '1'
r = int(s, 2)
if r < 20:
R.append(n)
print(max(R))
# Ответ: 12
1.
R = []
Создание пустого списка `R`, в который будут добавляться значения.
2.
for n in range(2000):
Цикл `for`, который проходит по значениям от 0 до 1999.
3.
s = bin(n)[2:]
Преобразование числа `n` в двоичное представление и сохранение его в переменной `s`, исключая первые два символа, которые обозначают приставку "0b".
4.
if s.count('1') % 2 == 0:
Проверка условия: если количество единиц в строке `s` делится на 2 без остатка.
5.
s = '10' + s[2:] + '0'
Изменение строки `s`, добавляя приставку "10" в начало и "0" в конец исходной строки `s`, начиная с третьего символа.
6.
else:
Выполняется, если условие в пункте 4 не выполнено.
7.
s = '11' + s[2:] + '1'
Изменение строки `s`, добавляя приставку "11" в начало и "1" в конец исходной строки `s`, начиная с третьего символа.
8.
r = int(s, 2)
Преобразование строки `s` из двоичного представления в целое число и сохранение результата в переменной `r`.
9.
if r < 20:
Проверка условия: если значение `r` меньше 20.
10.
R.append(n)
Добавление значения `n` в список `R`.
11.
print(max(R))
Вывод на экран максимального значения из списка `R`.
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Значение арифметического выражения 3**100 - х, где х - целое положительное число, не превышающее 2030, записали в троичной системе счисления.
Определите наименьшее значение х, при котором в троичной записи числа, являющегося значением данного арифметического выражения, содержится ровно два нуля.
В ответе запишите число в десятичной системе счисления.
for x in range(1, 2030):
n = 3**100 - x
R = []
while n > 0:
R = [n % 3] + R
n //= 3
if R.count(0) == 2:
print(x)
break
# Ответ: 9
1.
for x in range(1, 2030):
Цикл `for`, который проходит по значениям `x` от 1 до 2029.
2.
n = 3**100 - x
Вычисление значения `n` как разности между `3` в степени `100` и `x`.
3.
R = []
Создание пустого списка `R`, который будет содержать цифры в троичной системе счисления.
4.
while n > 0:
Цикл `while`, который выполняется до тех пор, пока `n` больше нуля.
5.
R = [n % 3] + R
Добавление остатка от деления числа `n` на 3 в начало списка `R`.
6.
n //= 3
Целочисленное деление числа `n` на 3 для перехода к следующей цифре троичной записи.
7.
if R.count(0) == 2:
Проверка условия: если в списке `R` ровно два раза встречается цифра 0.
8.
print(x)
Вывод значения `x`, которое соответствует условиям задачи.
9.
break
Прерывание цикла, если было найдено первое подходящее значение `x`.
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Дано арифметическое выражение:
123XAB_31 + 3CEX321_31
Переменная х в каждом числе обозначает неизвестную цифру 31-ричной системы счисления. Необходимо найти наибольшее возможное значение х, при котором значение данной суммы кратно 17. В ответе необходимо указать частное от деления значения данной суммы на 17 в десятичной системе счисления. Основание системы счисления указывать не нужно.
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
for x in alphabet[:31]:
A = int(f'123{x}AB', 31)
B = int(f'3CE{x}321', 31)
if (A + B) % 17 == 0:
print((A + B) // 17)
# Ответ: 179431046
1.
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
Создание отсортированного списка `alphabet`, содержащего символы цифр и заглавных латинских букв.
2.
for x in alphabet[:31]:
Цикл `for`, который перебирает первые 31 элемент из списка `alphabet`.
3.
A = int(f'123{x}AB', 31)
Преобразование строки `f'123{x}AB'` в число в системе счисления 31 и сохранение этого числа в переменной `A`.
4.
B = int(f'3CE{x}321', 31)
Преобразование строки `f'3CE{x}321'` в число в системе счисления 31 и сохранение этого числа в переменной `B`.
5.
if (A + B) % 17 == 0:
Проверка условия: если сумма чисел `A` и `B` делится на 17 без остатка.
6.
print((A + B) // 17)
Вывод на экран частного от деления суммы чисел `A` и `B` на 17.
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите программу, которая перебирает целые числа, большие 600 000, в порядке возрастания и ищет среди них такие, среди делителей которых есть хотя бы одно число, оканчивающееся на 7, но не равное 7 и самому числу. Необходимо вывести первые 5 таких чисел, и наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.
Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем — наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.
def divisors(x):
div = []
for j in range(2, int(x ** 0.5) + 1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))
cnt = 0
for n in range(600001, 10**10):
d = [x for x in divisors(n) if x % 10 == 7 and x != 7]
if len(d) > 0:
print(n, min(d))
cnt += 1
if cnt == 5:
break
# Ответ:
# 600001 437
# 600002 47
# 600003 1227
# 600005 217
# 600012 16667
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Пусть S - последовательность из N целых чисел, пронумерованных подряд, начиная с 1. Обозначим S_i,S_j, S_k как три элемента последовательности S, где і < j < k. Определите в последовательности S три таких члена S_i, S_j, S_k, что S_i > S_j, S_k > S_j и значение выражения (S_i -S_i) + (S_k-S_j) максимально.
Гарантируется, что в последовательности есть три числа S_i, S_j, S_k, удовлетворяющие условию задачи.
Входные данные
Дано два входных файла [файл А и файл В), каждый из которых в первой строке содержит число N [5 < N < 10 000 000] - количество целых чисел. Каждая из следующих N строк содержит одно целое число, не превышающее по модулю 1000.
В ответ укажите два числа: сначала значение искомой величины для файла А, затем - для файла В.
f = open('27.txt')
n = int(f.readline())
M = [int(i) for i in f]
res = 0
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
s1 = M[i]
s2 = M[j]
s3 = M[k]
if s1 > s2 < s3:
res = max(res, (s1 - s2) + (s3 - s2))
print(res)
res = 0
m1 = m2 = m3 = r1 = 0
for i in range(n - 2):
m1 = max(m1, M[i])
if m1 - M[i+1] > r1:
r1 = m1 - M[i + 1]
m2 = M[i + 1]
m3 = M[i + 2]
res = max(res, m3 - m2 + r1)
print(res)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Вот проголосовать на выборах можно в любой удобной точке страны, просто сделай пару кликов на Госуслугах для выбора другой локации. (Кстати, можно голосовать и онлайн).
Было бы славно, если бы существовала возможность приехать сдать ЕГЭ в Москве или Калининграде🙂
Было бы славно, если бы существовала возможность приехать сдать ЕГЭ в Москве или Калининграде
Please open Telegram to view this post
VIEW IN TELEGRAM
Текстовый файл состоит из заглавных букв латинского алфавита А, B, C, D, E и F.
Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых пара символов DE (в указанном порядке) встречается не более 240 раз.
Для выполнения этого задания следует написать программу.
s = open('24.txt').readline()
s = s.replace('DE', 'D E').split()
maxi = -1
for i in range(len(s)):
r = ''.join(s[i:i+241])
maxi = max(maxi, len(r))
print(maxi)
1.
s = open('24.txt').readline()
Чтение строки из файла '24.txt' и сохранение этой строки в переменной `s`.
2.
s = s.replace('DE', 'D E').split()
Замена подстроки 'DE' на 'D E' в строке `s` с последующим разделением строки на список слов.
3.
maxi = -1
Инициализация переменной `maxi` c начальным значением -1 для хранения максимальной длины подстроки.
4.
for i in range(len(s)):
Цикл `for`, который проходит по индексам элементов в списке `s`.
5.
r = ''.join(s[i:i+241])
Создание строки `r`, объединив элементы списка `s` от индекса `i` до индекса `i+241`.
6.
maxi = max(maxi, len(r))
Обновление переменной `maxi` значением, равным максимуму между текущим значением `maxi` и длиной строки `r`.
7.
print(maxi)
Вывод наибольшей длины строки `r` из всех подстрок в переменной `s`.
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
💢 Итог первого дня ЕГЭ 2024 #useful
Первая часть:
- 7,11,14 новые формулировки
(не критичные, можно разобраться)
- 6, 10 поменяли вопрос
- 13 и 22 как в Демоверсии
Вторая часть:
- 24 усложнили, задачка неприятная
- 25 очень старая задача с делителями (мало, кто ожидал)
- 26 поменяли вопрос, задача с посадкой мест
- 27 обновленное, несложное)
Какие ощущения после экзамена? 😅👍👎
Информатика ЕГЭ | itpy 🧑💻
Поддержать автора: boosty 💵
Первая часть:
- 7,11,14 новые формулировки
(не критичные, можно разобраться)
- 6, 10 поменяли вопрос
- 13 и 22 как в Демоверсии
Вторая часть:
- 24 усложнили, задачка неприятная
- 25 очень старая задача с делителями (мало, кто ожидал)
- 26 поменяли вопрос, задача с посадкой мест
- 27 обновленное, несложное)
Какие ощущения после экзамена? 😅👍👎
Информатика ЕГЭ | itpy 🧑💻
Поддержать автора: boosty 💵
Место, куда можно слить свой бомбёж после экзамена 🖥
➡️ ➡️ ➡️
Please open Telegram to view this post
VIEW IN TELEGRAM
from itertools import *
cnt = 0
for p in product('0123456789AB', repeat=6):
num = ''.join(p)
if num[0] != '0' and num.count('7') == 1:
if len([x for x in num if int(x, 12) > 9]) <= 3:
cnt += 1
print(cnt)
# Ответ: 888669
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
bit_all = 1_475_560 * 280
pixels = 1024 * 960
i = 13
bit = bit_all / (pixels * i)
print(bit)
# 32.3296 -> 32
Найдем вес переданного пакета: 1 474 560 бит * 280 с = 412 876 800 бит
Найдет количество бит, необходимых для кодирования одного пикселя: 2^13 = 8192. (13 бит)
Найдем количество снимков: 412 876 800 / (1024 * 960 * 13) ~ 32.307
Округляем в нижнюю сторону, получаем 32 снимка.
Ответ: 32
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
from ipaddress import *
for mask in range(32+1):
net = ip_network(f'170.155.137.181/{mask}', 0)
if str(net) == f'170.155.136.0/{mask}':
print(net.netmask)
from ipaddress import *
maxi = []
for mask in range(32+1):
net = ip_network(f'170.155.137.181/{mask}', 0)
if str(net) == f'170.155.136.0/{mask}':
maxi.append(int(str(net.netmask).split('.')[2]))
print(max(maxi))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def F(x, A):
B = 70 <= x <= 90
return (x % A == 0) or (B <= (x % 27 != 0))
for A in range(1, 1000):
if all(F(x, A) for x in range(1, 10000)):
print(A)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
from ipaddress import *
net = ip_network('106.184.0.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s.count('1') % 3 == 0:
cnt += 1
print(cnt)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
M = [int(x) for x in open('17.txt')]
D = [x for x in M if x % 32 == 0]
R = []
for i in range(len(M)-1):
x, y = M[i], M[i+1]
if x < 0 or y < 0:
if (x + y) < len(D):
R.append(x + y)
print(len(R), max(R))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM