坐标组成的最大三角形

C语言问题 请问为什么用例二输出错误?

题目描述

欢迎参加程序设计竞赛~

程序设计竞赛中有着很多有意思的问题,其中,与三角形有关的问题就经常出现。今天你要解决的,就是其中最简单的一个问题:

给定平面直角坐标系上的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 M=0;
    int N=0;
    int i=0;
    int k=0;
    int a[200][2];
    int x,y,z;
    double c1,c2,c3,c;
    double s=0;
    int max=0;
    scanf("%d",&M);
    for(i=1;i<=M;i++)
    {
        scanf("%d",&N);
        for(k=0;k<N;k++)
        {
            scanf("%d %d",&a[k][0],&a[k][1]);
        }
        for(x=0;x<N-2;x++)
        {
            for(y=x+1;y<N-1;y++)
            {
                for(z=y+1;z<N;z++)
                {
                    c1=sqrt((a[x][0]-a[y][0])*(a[x][0]-a[y][0])+(a[x][1]-a[y][1])*(a[x][1]-a[y][1]));
                    c2=sqrt((a[x][0]-a[z][0])*(a[x][0]-a[z][0])+(a[x][1]-a[z][1])*(a[x][1]-a[z][1]));
                    c3=sqrt((a[z][0]-a[y][0])*(a[z][0]-a[y][0])+(a[z][1]-a[y][1])*(a[z][1]-a[y][1]));
                    c=(c1+c2+c3)/2;
                    s=sqrt(c*(c-c1)*(c-c2)*(c-c3));
                }
                if(s>max)
                max=s;
            }
        }
        printf("%.1lf\n",s);
    }
    return 0;
}

用例一通过了,但是用例二输出差别很大

img

我本来怀疑可能是数据类型错误,但是从float改为double好像没什么用

请问我的代码哪里出了问题呢?为什么通过不了用例二?