杭电OJ-2036

题目链接:题目链接

杭电OJ-2036_第1张图片
image.png

解题思路:在求N边形面积的时候,可以将多边形分解成为N-2个三角形的面积相加,如在算5边形的时候,可以分解成3个三角形,之后计算其面积再进行相加。如下图:
杭电OJ-2036_第2张图片
image.png

image.png

代码实现如下:
以(0.0)作为定点

#include
#include
typedef struct Point
{
    double x, y;   //定义坐标点
}point;
point p[105];
double area(point *p, int n)
{
    if (n < 3)
        return 0;
    double sum = 0;
    p[n + 1] = p[1];
    for (int i = 1;i <= n;i++)
        sum += p[i].x*p[i + 1].y - p[i].y*p[i + 1].x;//计算每个三角形的面积
    sum = fabs(sum) / 2.0;
    printf("%.1lf\n", sum);
}
int main(void)
{
    double area(point *p, int n);
    int n;
    while (scanf("%d", &n) != EOF)
    {
        if (n == 0)
            continue;
        for (int i = 1;i <= n;i++)
            scanf("%lf %lf", &p[i].x, &p[i].y);
        area(p, n);
    }
}

你可能感兴趣的:(杭电OJ-2036)