Задания
Версия для печати и копирования в MS Word
Тип 15 № 37150
i

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

(2x + y ≠ 70) ∨ (x < y) ∨ (A < x)

тож­де­ствен­но ис­тин­но, то есть при­ни­ма­ет зна­че­ние 1 при любых целых не­от­ри­ца­тель­ных x и y?

Спрятать решение

Ре­ше­ние.

Зна­че­ние па­ра­мет­ра А вли­я­ет на зна­че­ние всего вы­ра­же­ния в тех слу­ча­ях, когда пер­вые два под­вы­ра­же­ния не вы­пол­ня­ют­ся. Имеем:

 си­сте­ма вы­ра­же­ний левая круг­лая скоб­ка 2x плюс y не равно 70 пра­вая круг­лая скоб­ка =Ложь, левая круг­лая скоб­ка x мень­ше y пра­вая круг­лая скоб­ка =Ложь конец си­сте­мы . или  си­сте­ма вы­ра­же­ний 2x плюс y=70,x боль­ше или равно y. конец си­сте­мы .

Пе­ре­бе­рем все пары целых чисел (x, y), когда это усло­вия со­блю­да­ют­ся. (35, 0), (34, 2), (33, 4), (32, 6), (31, 8), (30, 10), (29, 12), (28, 14), (27, 16), (26, 18), (25, 20), (24, 22). За­ме­тим, что ми­ни­маль­ное зна­че­ние х в этих парах  — 24. Зна­чит, наи­боль­шее A равно 23.

 

При­ведём дру­гое ре­ше­ние.

Най­дем точки, со­от­вет­ству­ю­щие си­сте­ме

 си­сте­ма вы­ра­же­ний 2x плюс y=70,x боль­ше или равно y. конец си­сте­мы . рав­но­силь­но 70 минус 2x=70 рав­но­силь­но 3x=70 рав­но­силь­но x= дробь: чис­ли­тель: 70, зна­ме­на­тель: 3 конец дроби = целая часть: 23, дроб­ная часть: чис­ли­тель: 1, зна­ме­на­тель: 3 .

Най­дем эти точки на плос­ко­сти:

Возь­мем точку с ми­ни­маль­ным зна­че­ни­ем х  — (24, 22). Зна­чит, наи­боль­шее A равно 23.

 

При­ведём про­грамм­ное ре­ше­ние.

 

Пас­каль

var a, x, y: integer;

    fl: boolean;

begin

    for a := 100 downto 0 do begin

        fl := true;

        for x := 0 to 100 do for y := 0 to 100 do

            if not((2*x+y <> 70) or(x < y) or(A < x)) then

                fl := false;

        if fl then begin

            writeln(a); break;

        end;

    end;

end.

Python

for A in range(100, -1, -1):

if all([(2*x+y!=70) or (x < y) or (A < x) for x in range(100) for y in range(100)]):

print(A)

break

С++

#include <iostream>

using namespace std;

int main(){

    int a, x, y;

    bool fl;

    for(a=100; a>=0; a--){

        fl = true;

        for(x=0;x <= 100; x++)

            for(y=0;y<=100;y++)

                if(!((2*x+y != 70) || (x < y)||(a < x)))

                    fl = false;

        if(fl){

            cout << a; break;

        }

    }

}

 

Ответ: 23.

 

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

for A in range(300, -1, -1):

k = 0

for x in range(300):

for y in range(300):

if (2 * x + y != 70) or (x < y) or (A < x):

k += 1

if k == 90_000:

print(A)

break

Источник: ЕГЭ по ин­фор­ма­ти­ке 24.06.2021. Ос­нов­ная волна
Раздел кодификатора ФИПИ: 1.5.1 Вы­ска­зы­ва­ния, ло­ги­че­ские опе­ра­ции, кван­то­ры, ис­тин­ность вы­ска­зы­ва­ния