改革春风吹满地Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 42680 Accepted Submission(s): 21871 Problem Description “ 改革春风吹满地,
Input 输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2... xn, yn),为了简化问题,这里的所有坐标都用整数表示。
Output 对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。
Sample Input 3 0 0 1 0 0 1 4 1 0 0 1 -1 0 0 -1 0
Sample Output 0.5 2.0 |
#include<iostream>
#include<cmath>
using namespace std;
struct node{
int x,y;
};
int main()
{
int n;
node d[10005];
while(cin>>n,n)
{
for(int i=0;i<n;i++)
{
cin>>d[i].x>>d[i].y;
}
double s=0;
for(int i=1;i<n-1;i++)
{
s+=(d[i+1].x-d[0].x)*(d[i].y-d[0].y)-(d[i].x-d[0].x)*(d[i+1].y-d[0].y);
}
printf("%.1f\n",fabs(s/2.0));//最后结果再取绝对值,在加和过程中取绝对值会WA
}
return 0;
}
上面的代码也可以求出凹多边形的面积,点要按照多边形边的顺序输入。