c语言编程题目,测试结果都是对的,但提交显示下标越界?

2025-04-04 15:11:48
推荐回答(1个)
回答1:

#include
#include

#include

#define NOT_EXIST -1



int* createGarden(size_t n);
void destroyGarden(int*g);
int getHeight(const int*g , size_t n,size_t row , size_t col);
void setHeight(int*g , size_t n,size_t row , size_t col , int h);

int main()
{
    
    size_t n;
    size_t i,j;
    int sh = INT_MAX;
    
    int origin_sum=0;
    
    
    scanf("%d",&n);            //输入n 
    
    int*g = createGarden(n) ;   //创建花圃二维矩阵
    
    for(i=0;i    { 
         scanf("%d",g+i);
         origin_sum+=g[i];       //求花圃原来总的高度。 
    }
    
    
    for(i=0;i    {
        for(j=0;j        {
            if( i!=j && i+j!=(n-1)  )        //如果不是对角线上的点 
            {
                //这里面可以不执行任何操作。下面的代码是多余的
               // setHeight(g,n,i,j,NOT_EXIST);    //正对角线规律: row == col 
                                                //反对角线规律 row+ col  == n-1 
                 //printf("(i=%d,j=%d)\n",i,j);
                
            }
            else  //在对角线上找最矮的。 
            {
                
                if(sh > getHeight(g,n,i,j))
                {
                    sh = getHeight(g,n,i,j);
                }
            }
        }
        
    }
    

    //(总的高度-剩余的高度合 )* 2 
    printf("%d\n",(origin_sum -(2*n-1)*sh )*2);
     
    destroyGarden(g);
    
    return 0;
}


int* createGarden(size_t n)
{
    int*garden = (int*)malloc(sizeof(int)*n*n);
    return garden;
}
void destroyGarden(int*g)
{
    free(g);
}

int getHeight(const int*g , size_t n,size_t row , size_t col)
{
    return g[ row*n + col  ];
}

void setHeight(int*g , size_t n,size_t row , size_t col , int h)
{
    g[ row*n + col  ] = h;
}