给出二维坐标系中的n(n<50)个点的坐标x,y(x,y<1000,整数),其中任意三个不在同一条直线上的三个点可以构成一个三角形,请找出最大面积的三角形,输出其面积(实数,保留4位小数)


#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);
}