#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
double s[1000],area[1000],a[81],b[81],c[81],max;
int x[51],y[51],n,i,j,k;
static int num=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&x[i]);
scanf("%d",&y[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(k=j+1;k<n;k++)
{
a[num]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
b[num]=sqrt((x[j]-x[k])*(x[j]-x[k])+(y[j]-y[k])*(y[j]-y[k]));
c[num]=sqrt((x[i]-x[k])*(x[i]-x[k])+(y[i]-y[j])*(y[i]-y[j]));
num++;
}
}
}
for(i=0;i<=num;i++)
{
if(a[i]+b[i]>c[i]&&a[i]+c[i]>b[i]&&b[i]+c[i]>a[i])
{
s[i]=(a[i]+b[i]+c[i])/2;
area[i]=sqrt(s[i]*((s[i])-a[i])*((s[i])-b[i])*((s[i])-c[i]));
}
}
max=area[0];
for(i=0;i<=num;i++)
{
if(max<area[i])
{
max=area[i];
}
}
printf("%.4lf",max);
}
啥问题呢?找代码错误?
为啥a,b,c数组大小只有81呢?50个点组成的三角形只有这么多?
在三重循环内就就可以根据a,b,c的值计算三角形面积啊,用个max变量获得其中最大值就好了啊
double getArea(double a,double b,double c)
{
double s = (a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
double max=0,a,b,c,s;
int x[50],y[50],n,i,j,k;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(k=j+1;k<n;k++)
{
a=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
b=sqrt((x[j]-x[k])*(x[j]-x[k])+(y[j]-y[k])*(y[j]-y[k]));
c=sqrt((x[i]-x[k])*(x[i]-x[k])+(y[i]-y[j])*(y[i]-y[j]));
s = getArea(a,b,c);
if(max < s)
max = s;
}
}
}
printf("%.4lf",max);
}