分析&&题解:
给出一个多边形的顶点数N和这N个顶点的坐标(坐标为整数,所以注意要将 点结构体里的类型换成int,否则用C读取不进去!!!),然后直接套模板计算即可。计算多边形面积:
//vcount 为定点数,p[]存储定点,从0开始
double Area(int vcount, point p[])
{
double s;
if (vcount<3)
return 0;
s = p[0].y* (p[vcount-1].x - p[1].x );
for ( int i=1; i<vcount; i++)
{
s += p[i].y*(p[(i-1)].x-p[(i+1)%vcount].x);
}
return s/2;
}
- AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
int n;
struct point
{
int x;
int y;
}p[110];
double Area(int vcount, point p[])
{
double s;
if (vcount<3)
return 0;
s = p[0].y* (p[vcount-1].x - p[1].x );
for ( int i=1; i<vcount; i++)
{
// printf("%.1lf\n", s);
s += p[i].y*(p[(i-1)].x-p[(i+1)%vcount].x);
}
return s/2;
}
int main()
{
while(scanf("%d", &n) && n )
{
for(int i=0;i<n;i++)
{
scanf("%d%d", &p[i].x, &p[i].y);
}
printf("%.1lf\n", Area(n, p) );
}
}