Найти тему

Разбор номера 34521 ЕГЭ по информатике #15

Условие: Тип 15 № 34521

Обозначим через m & n поразрядную конъюнкцию неотрицательных целых чисел m и n.

Например, 14 & 5  =  1110_2 & 0101_2  =  0100_2  =  4.

Для какого наибольшего целого числа А формула

x & 51 = 0 ∨ (x & 41 = 0 → x & А = 0)

тождественно истинна (т. е. принимает значение 1 при любом неотрицательном целом значении переменной x)?

Решение:

Вариант 1: классическое решение через переменную True
Вариант 1: классическое решение через переменную True

# Код решения Вариант 1
def F(x, A):
return (x & 51 == 0) or ((x & 41 == 0) <= (x & A == 0))

R = []
for A in range(0, 1000):
flag = True
for x in range(0, 1000):
if F(x, A) == False:
flag = False
break
if flag == True:
R.append(A)
print(max(R))

Комментарии к первому варианту решения задачи:

  1. создаем свою функцию для обработки формулы логики из условия, функция принимает всего два аргумента
  2. возвращаем значение логической функции из условия
  3. -
  4. создадим пустой список для удобства поиска наибольшего подходящего числа
  5. пробегаем диапазон неотрицательных целых чисел через range()
  6. для каждого нового взятого числа А создаем переменную со значением True
  7. таким же образом пробегаем диапазон для переменной х - просто большое кол-во чисел
  8. если функция при переданных ей аргументах вернет ложь, то такое А нам не подходит по условию
  9. в таком случае меняем переменную flag на False значение
  10. и прерываем цикл перебора переменной х, так как это просто трата времени
  11. но если же пройдя все значения диапазона х переменной, ни разу не произошел break и значение flag равно True, то такое число А нам подходит по условию – при А формула тождественно истинна при любых х (большом кол-ве)
  12. добавляем подходящее число в список R
  13. и выводим максимальный элемент из всех подходящих чисел А, лежащих в списке R

Вариант 2: решение с использованием функции all и списка list
Вариант 2: решение с использованием функции all и списка list

# Код решения Вариант 2
def F(x):
return (x & 51 == 0) or ((x & 41 == 0) <= (x & A == 0))

R = []
for A in range(0, 1000):
if all(F(x) for x in range(0, 1000)):
R.append(A)
print(max(R))

Комментарии ко второму варианту решения задачи:

1-4. строки идентичные прошлому решению

5. пробегаем подходящие по условию целые, неотрицательные числа А

6. если все функции в all() буду истинными, то условие if истинно

7. добавляем подходящее число А в список R

8. и выводим максимальный элемент из всех подходящих чисел А, лежащих в списке R

Вариант 3: решение с использованием только лишь функции all
Вариант 3: решение с использованием только лишь функции all

# Код решения Вариант 3
def F(x):
return (x & 51 == 0) or ((x & 41 == 0) <= (x & A == 0))

for A in range(1000, -1, -1):
if all(F(x) for x in range(0, 1000)):
print(A)
break

Комментарии к третьему варианту решения задачи:

  1. обратите внимание, если пробегать диапазон от большего к меньшему, то первое найденное число будет - наибольшим
  2. если все функции в all() будут истинными, то условие if истинно
  3. выводим подходящее число А на экран
  4. и прерываем цикл перебора, чтобы остаться с наибольшим подходящим А
Вариант 4: компактное решение без использования самописной функции F
Вариант 4: компактное решение без использования самописной функции F

# Код решения Вариант 4
for A in range(1000, -1, -1):
if all(((x & 51 == 0) or ((x & 41 == 0) <= (x & A == 0))) for x in range(0, 1000)):
print(A)
break

Комментарии к четвертому варианту решения задачи:

  1. пробегаем диапазон целых неотрицательных чисел
  2. если все функции в all() буду истинными, то условие if истинно
  3. выводим на экран первое подошедшее число
  4. так как мы пробегали убывающий диапазон, то первое - будет наибольшим

Вариант 5: просто полюбуйтесь на эту красоту
Вариант 5: просто полюбуйтесь на эту красоту

# Код решения Вариант 5
print(max([A for A in range(0, 1000) if all(((x & 51 == 0) or ((x & 41 == 0) <= (x & A == 0))) for x in range(0, 1000))]))

Комментарии к пятому варианту решения задачи:

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

Ответ: 41

Информатика ЕГЭ | itpy 👨‍💻

Присоединяйтесь и готовьтесь вместе с нами: t.me/informatika_kege_itpy
Присоединяйтесь и готовьтесь вместе с нами: t.me/informatika_kege_itpy