時間限制:1000ms 內存限制:65536kbmarkdown
經過率:107/134 (79.85%)
正確率:107/319 (33.54%)
spa
按順時針或逆時針順序輸入一個簡單多邊形的每一個頂點座標,求這個多邊形的面積。3d
在幾何形狀中,簡單多邊形是由直線,非相交的線段或「邊」組成的扁平形狀,其成對鏈接以造成封閉路徑。(百度百科)code
第一行一個整數nn,表示頂點數xml
接下來n行,每行22個整數x,yx,y表示一個頂點座標blog
對於每組數據,輸出一行,一個浮點數表示面積(保留7位小數)內存
3 0 0 100 100 100 0
5000.0000000
3≤n≤1000003≤n≤100000it
0≤x,y≤200io
#個人一點思路,不知道對不對:使用向量叉乘計算面積;class
for example:S△ABC=0.5*|a×b|;
如下是代碼:
#include <stdio.h> #include <stdlib.h>
int main( ){ int i,j,n; double s=0; double a[15][2]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<2;j++) scanf("%lf",&a[i][j]); for(i=1;i<n;i++) for(j=0;j<2;j++) a[i][j]=a[i][j]-a[0][j]; for(i=1;i<n-1;i++){ s = s + 0.5* ( a[i][0] *a[i+1][1] - a[i+1] [0] * a[i][1] ); } s=s>0?s:-s; printf("%.7lf",s); return 0; }
個人一點疑問:爲何最後s會出現負值呢?雖說我增長了一個判斷條件判斷s是否大於零能夠讓這道題AC,可是這個正負號反映出來的幾何問題我真的不是很明白……
若是能有人解答,再感謝不過!!