πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №15 → Задание i15-12

Задание №15 ЕГЭ Информатика с ответом и решением

Ответ: 21

Условие

Для какого наименьшего целого неотрицательного числа A выражение

(2m + 3n > 40) &or; ((m < A) &and; (n ≤ A))

тождественно истинно при любых целых неотрицательных m и n?

Подсказки — как подойти к решению

  1. Ложь возможна только если первое условие нарушено, а во второй скобке хотя бы одно неравенство не выполнено. Опасные точки — целые неотрицательные пары под заданной прямой.
  2. Скобка — это конъюнкция, поэтому она ложна и при большом m, и при большом n. Проверь обе возможности отдельно: порог определяет самая дальняя опасная пара.

Решение

Решим задачу графически. Условие (2m + 3n > 40) задаёт множество, отмеченное на рисунке закрашенной областью. Чтобы исходное выражение было тождественно истинно для любых целых и неотрицательных m и n, прямые m &le; A и n < A должны образовывать прямой угол на прямой m = n, вершина которого лежит таким образом, чтобы незакрашенная область была ниже и левее. Следовательно, они должны образовывать прямой угол, пересекаясь в точке (21, 21). Таким образом, наименьшее значение A равняется 21.

Ответ: 21.

Примечание.

Обратим внимание читателей, использующих программный способ решения этой и подобных задач, что в условии говорится о неотрицательных числах, поэтому перебор значений переменных m и n должен производиться от 0, а не от 1.

Приведём решение на языке Python.

for a in range(0, 300):

k = 0

for m in range(0, 300):

for n in range(0, 300):

if (2*m + 3*n > 40) or ((m < a) and (n <= a)):

k += 1

if k == 90_000:

print(a)

break

Приведём решение Михаила Глинского на языке Python.

for a in range(100):

flag = 1

for m in range(100):

for n in range(100):

f = ((2*m+3*n) > 40) or ((m < a) and (n <= a))

if f == 0:

flag = 0

break

if flag:

print(a)

break

Приведём решение Полины Егрушовой на языке Python.

m = []

def f(m,n,a):

return (2*m+3*n>40) or ((m<a) and (n<=a))

for a in range (0,1000):

if all(f(m,n,a)==1 for m in range (0,100) for n in range (0,100)):

m.append(a)

print(min(m))

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №15 по информатике