HDU 2036 多边形的面积

来源:互联网 发布:2017网络歌曲 编辑:程序博客网 时间:2024/05/29 13:44

以下两种方法求多边形面积:一:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <cmath>using namespace std;const int maxn=105;int n;struct node{    double x;    double y;}p[maxn];double area(node p[],int n){    double ans=0;    int i;    for(i=1; i<=n; i++)    {        ans+=p[i-1].x*p[i%n].y-p[i-1].y*p[i%n].x;    }    return fabs(ans/2.0);}int main(){    int i;    while(~scanf("%d",&n),n)    {        for(i=0; i<n; i++)        {            cin>>p[i].x>>p[i].y;        }        double sum;        sum=area(p,n);        printf("%.1lf\n",sum);    }    return 0;}二:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <algorithm>using namespace std;int n;struct node{    double x;    double y;};double area(node p1,node p2,node p3){    double ans;    ans=p1.x*p2.y+p2.x*p3.y+p3.x*p1.y-p2.x*p1.y-p3.x*p2.y-p1.x*p3.y;    return ans/2.0;}int main(){    node p1,p2,p3;    int i;    double sum;    while(scanf("%d",&n),n)    {        sum=0;        scanf("%lf%lf",&p1.x,&p1.y);        scanf("%lf%lf",&p2.x,&p2.y);        for(i=3; i<=n; i++)        {            scanf("%lf%lf",&p3.x,&p3.y);            sum+=area(p1,p2,p3);            p2=p3;        }        printf("%.1lf\n",sum);    }    return 0;}