// PascalABC.NET 3.1, сборка 1250 от 28.05.2016 begin var n:=ReadInteger('Задайте число строк/столбцов массива:'); var a:=MatrixRandom(n,n,-99,99); Writeln('Исходный массив'); for var i:=0 to n-1 do begin for var j:=0 to n-1 do Write(a[i,j]:4); Writeln end; Write('Кол-во нечетных элементов выше главной диагонали: '); var k:=0; for var i:=0 to n-2 do for var j:=i+1 to n-1 do if Odd(a[i,j]) then Inc(k); Writeln(k) end.
В основу решения возьму тот факт, что точка лежит внутри треугольника только в том случае, если сумма площадей трех образованных этой точкой и вершинами треугольников треугольников равна площади самого треугольника. Для нахождения площади треугольников использую формулу векторного произведения, деленного пополам.
begin
var n:=ReadInteger('Задайте число строк/столбцов массива:');
var a:=MatrixRandom(n,n,-99,99);
Writeln('Исходный массив');
for var i:=0 to n-1 do begin
for var j:=0 to n-1 do Write(a[i,j]:4);
Writeln
end;
Write('Кол-во нечетных элементов выше главной диагонали: ');
var k:=0;
for var i:=0 to n-2 do
for var j:=i+1 to n-1 do
if Odd(a[i,j]) then Inc(k);
Writeln(k)
end.
Тестовое решение
Задайте число строк/столбцов массива: 6
Исходный массив
31 27 -90 -64 -75 22
12 11 79 6 -14 73
-66 -52 -97 -82 -50 47
-65 20 25 -7 -13 46
-31 -9 -69 47 81 2
-43 -68 95 -3 -36 -55
Кол-во нечетных элементов выше главной диагонали: 6
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
int x1, y1, x2, y2, x3, y3, x0, y0;
scanf("%d%d%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3, &x0, &y0);
if (abs((x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0)) +
abs((x1 - x3) * (y0 - y3) - (x0 - x3) * (y1 - y3)) +
abs((x0 - x3) * (y2 - y3) - (x2 - x3) * (y0 - y3)) ==
abs((x1 - x3) * (y2 - y3) - (x2 - x3) * (y1 - y3)))
{
printf("YES");
} else {
printf("NO");
}
return 0;
}