题目描述
欢迎参加程序设计竞赛~
程序设计竞赛中有着很多有意思的问题,其中,与三角形有关的问题就经常出现。今天你要解决的,就是其中最简单的一个问题:
给定平面直角坐标系上的N个点,保证这N个点中任意三点都不共线。求任意三点能够构成的三角形中,面积最大的三角形的面积。
输入
输入的第一行是一个整数T(1 <= T <= 10),表示一共有T组用例。
每组用例的第一行为一个整数N(3 <= n <= 100),表示平面上点的个数。接下来的N行,每行包含两个用空格隔开的整数Xi和Yi(-1000 <= Xi, Yi <= 1000),表示第i个点的坐标(Xi, Yi)。
输出
每组用例输出一个数,表示最大的三角形的面积,结果保留一位小数。
输入样例
2
4
-1 1
1 1
1 -1
-1 -1
3
-1 -1
3 0
0 0
输出样例
2.0
1.5
#include <stdio.h>
#include <math.h>
int main()
{
int T,n,i;
double operate(int);
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%d",&n);
printf("%.1lf\n",operate(n));
}
return 0;
}
double operate(int n)
{
int i,j,k,t;
int a[10000][2]={0};
double s[10000],max;
for(i=0;i<n;i++)
{
scanf("%d %d",&a[i][0],&a[i][1]);
}
t=0;
for(i=0;i<=n-3;i++)
{
for(j=i+1;j<=n-2;j++)
{
for(k=j+1;k<=n-1;k++)
{
s[t]=0.5*fabs((((double)a[j][0]-(double)a[i][0])*((double)a[k][1]-(double)a[i][1]))-(((double)a[k][0]-(double)a[i][0])*((double)a[j][1]-(double)a[i][1])));
t++;
}
}
}
max=s[0];
for(i=1;i<t-1;i++)
{
if(max<s[i]) max=s[i];
else continue;
}
return max;
}
已经尝试过修改数组大小,但还是不行,显示无效内存引用
通过隐藏用例