
На числовой прямой даны два отрезка:
истинна при любом значении
Решение. Раскроем дважды импликацию, получим:
Используем Законы де Моргана, имеем:
Первое и второе выражения принимают
Примечание.
В отрезке [150; 171] содержится
Приведём другое решение задачи на языке Python.
s = []
for a1 in range(1,200):
for a2 in range(1,200):
fl= True
for x in range(1,200):
if not((130<=x<=171)<=(((150<=x<=185)and (not(a1<=x<=a2)))<= (not(130<=x<=171)))):
fl = False
break
if fl:
s.append(a2-a1)
print(min(s))
Приведём решение задачи Ивана Гладких на языке Python.
m = 10**6
P = [i for i in range(130, 172)]
Q = [i for i in range(150, 186)]
for Amin in range(1, 200):
for Amax in range(Amin + 1, 200):
check = 1
A = [i for i in range(Amin, Amax)]
for x in range(-300, 300):
f = (x in P) <= (((x in Q) and (x not in A)) <= (x not in P))
if not f:
check = 0
break
if check == 1:
m = min(m,Amax - Amin)
print(m-1)
Приведём решение Сергея Донец на PascalABC.NET:
begin
var P := 130..171;var Q := 150..185;
var setX:=|P.First,P.Last,Q.First,Q.Last,-999,999|
.SelectMany(x->|x-0.1,x,x+0.1|);
setX.Order.Combinations(2).Select(m->m[0]..m[1])
.Where(A->setX.All(x->
(x in P)<=(((x in Q)and not(x in A))<=not(x in P))
)).Min(A->A.Size).Print;
end.
PDF-версии: