Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 22798 Accepted Submission(s): 11799
3 0 0 1 0 0 1 4 1 0 0 1 -1 0 0 -1 0
0.5 2.0
知道定理的人真是永远走在前面啊,看到题知道是分割成三角形求解,但求所有的三角形的面积也是很难的事。看了讨论区,知道有叉乘定理这东西,确实好用。
题解:求任意n边形面积, 只需要把它分割成以(0,0)为定点的n个三角形再求和。每个三角形的面积为Sn=abs((x1*y2-x2*y1))*0.5,得多边形的面积为:S=0.5 *abs ( (x0*y1-x1*y0) + (x1*y2-x2*y1) + ... + (Xn-1*y0-x0*Yn-1) )最后一个要注意加上(注意:只有各点是逆时针排列才能这样做)
具体代码如下:
#include<cstdio> #include<cmath> int main() { int n,i,x[105],y[105]; double s; while(scanf("%d",&n)&&n) { s=0; scanf("%d%d",&x[0],&y[0]); for(i=1;i<n;i++) { scanf("%d%d",&x[i],&y[i]); s+=x[i-1]*y[i]-x[i]*y[i-1]; } s+=x[n-1]*y[0]-x[0]*y[n-1]; //第一个点与最后一个点围成的三角形,不能忘 printf("%.1lf\n",s/2.0); } return 0; }