題目在 https://zerojudge.tw/ShowProblem?problemid=j251
這題用數學公式解即可. 三個座標點的三角形面積公式搞清楚就好.
三個點如果是 P0(x0,y0), P1(x1,y1), P2(x2,y2)
隨便用哪個點當出發點都行, 可以構成兩個向量, 我就用P0好了.
V0=P1-P0 = (x1-x0, y1-y0) = (V0x,V0y)
V1=P2-P0 = (x2-x0, y2-y0) = (V1x,V1y)
然後兩個向量的外積,就是這三個點形成的三角形面積的兩倍.剛好就是題目的答案.
順便一題, 外積為0,就是這兩個向量共線. 這題不用特別判斷, 反正也會算出0.
外積 V0 X V1 = V0x * V1y – V1x * V0y
把外積的絕對值印出來即可, 完整程式如下.
#include <stdio.h>
#include <math.h>
#include <cmath>
#include <iostream>
int main(){
long P[3][2]; //P0,P1,P2,P0,P1
scanf("%ld %ld %ld %ld %ld %ld",
&P[0][0],&P[0][1],&P[1][0],&P[1][1],&P[2][0],&P[2][1]);
long V[2][2];
//V[0][]=P1-P0
V[0][0]=P[1][0]-P[0][0];
V[0][1]=P[1][1]-P[0][1];
//V[1][]=P2-P0
V[1][0]=P[2][0]-P[0][0];
V[1][1]=P[2][1]-P[0][1];
long v1=V[0][0]*V[1][1];
long v2=V[1][0]*V[0][1];
long v=abs((V[0][0]*V[1][1])-(V[1][0]*V[0][1]));
printf("%ld\n",v);
}
C++外積介紹可參考維基百科 https://zh.wikipedia.org/zh-tw/%E5%8F%89%E7%A7%AF