各頂點 x,y 坐標 減去 a[0][0]。以 a[0][0] 為主 計算各三角形面積並累加。
#include <stdio.h>
#include <stdlib.h>
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=0;i<n;i++)
for(j=0;j<2;j++)
a[i][j]=a[i][j]-a[0][0];
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]);
}
printf("%.2lf",s);
return 0;
}
追問
測試數據1 輸出錯誤
錯誤輸出:
1.00
期望輸出:
5.00
測試數據2 輸出錯誤
錯誤輸出:
-10000.00
期望輸出:
15000.00
測試數據3 輸出錯誤
錯誤輸出:
-1067.50
期望輸出:
984.50
測試數據4 輸出錯誤
測試數據5 輸出錯誤
錯誤輸出:
-1000.00
期望輸出:
1100.00
都錯了啊
追答
// 改正:a[i][j]=a[i][j]-a[0][j];
// 不是 -a[0][0], 是 a[0][j]
#include <stdio.h>
#include <stdlib.h>
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] );
}
printf("%.2lf",s);
return 0;
}