Anna_Lcc 2021-12-14 23:17 采纳率: 100%
浏览 48
已结题

请大家帮我看看为什么会有无效内存引用

题目描述

欢迎参加程序设计竞赛~

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

给定平面直角坐标系上的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;
 } 

img

已经尝试过修改数组大小,但还是不行,显示无效内存引用

通过隐藏用例

  • 写回答

1条回答 默认 最新

  • 五一编程 2021-12-14 23:55
    关注

    对比下代码:

    
    #include <stdio.h>
    
    float GetMax(float s[20][20][20],int N)
    {
        float max=0;
        int i,j,k,la;
        for(i=1;i<=N;i++)
            for(j=1;j<=N;j++)
                for(k=1;k<=N;k++)
                {
                    if (s[i][j][k]>max)
                    {
                        max=s[i][j][k];
                    }
                }
                return max;
    }
    void main()
    {
        int T,i,j,N[20],x[20][20],y[20][20],la,k;
        float s[20][20][20],s1[20][20][20],max[20];
    
        scanf("%d",&T);
    
        for(i=1;i<=T;i++)
        {
            scanf("%d",&N[i]);
            for(j=1;j<=N[i];j++)
            {
                scanf("%d%d",&x[i][j],&y[i][j]);
            }
        }
        for(la=1;la<=T;la++) // as for 第la大组 数据
        {
            for(i=1;i<=N[la];i++)
                for(j=1;j<=N[la];j++)
                    for(k=1;k<=N[la];k++)
                    {
                        s1[i][j][k] = 0.5 * (x[la][i]*y[la][j]+y[la][i]*x[la][k]+x[la][j]*y[la][k]-x[la][i]*y[la][k]-y[la][i]*x[la][j]-y[la][j]*x[la][k]);
                        s[i][j][k] = (s1[i][j][k]>0)?s1[i][j][k]:(0-s1[i][j][k]);
                    }
                    max[la]= 1.0 * GetMax(s,N[la]);
                    printf("%.1f\n",max[la]);
        }
    }
    

    运行结果为:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看