Var x1,y1,z1,x2,y2,z2,x3,y3,z3,abx,aby,abz,acx,acy,acz,s,mx,my,mz,c:real;
begin;
readln(x1);
readln(y1);
readln(z1);
readln(x2);
readln(y2);
readln(z2);
readln(x3);
readln(y3);
readln(z3);
abx:=x2-x1;
acx:=x3-x1;
aby:=y2-y1;
acy:=y3-y1;
abz:=z2-z1;
acz:=z3-z1;
mx:=aby*acz-abz*acy;
my:=abz*acx-abx*acz;
mz:=abx*acy-aby*acx;
c:=sqrt(sqr(mx)+sqr(my)+sqr(mz));
s:=0.5*c;
writeln(s);
end.<span>
</span>
#include <iostream>
using namespace std;
int main() {
int n, answer = 1;
cin >> n;
int a[n];
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < n-1; i++)
if(a[i] >= a[i+1]) {
answer = 0;
break;
}
cout << (answer ? "yes" : "no") << endl;
}
Самый быстрый и легкий способ - логически порассуждать, применив правила алгебры логики (АЛ).
Запишем в немного упрощенном виде:
¬(a + b) * c.
Наше выражение состоит из отрицания первой части, в которой есть два слагаемых (ИЛИ = "+"), и умножения (И = "*") первой и второй частей. Так как нам нужно найти наборы, которые дают ложь, то проще всего будет посчитать вторую часть, которая будет ложна.
Вспомним правила АЛ:
0*0 = 0;
1*0 = 0;
0*1 = 0;
1*1 = 1;
Итого видим, что только в одном случае выражение дает истину - 1*1, чего нам стоит избегать.
Итак, попробуем решить вторую часть методом перебора:
1) - истина.
2) - истина.
3) - ложь.
4) - ложь.
5) - истина.
Итого в ответ идут два выражения: 3, 4.
Для достоверности нужно проверить истинные выражения, подставив в первую часть (на случай, если будет "0*1").
Для этого упростим.
¬(a+b) = ¬a * ¬b.
1) - истина.
2) - ложь
5) - истина.
Так как во втором выражении вышла ложь, то оно тоже пойдет в ответ (0*1 = 0).
Ответ: 2, 3, 4.