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

#include<stdio.h>#include<stdlib.h>intmain(){intn;scanf("%d",&n);inti,j,s[n][n];for(i... #include <stdio.h>#include <stdlib.h>int main(){ int n; scanf("%d",&n); int i,j,s[n][n]; for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&s[i][j]); } } int sum=0,x,y; for(x=0;x<n;x++) { for(y=0;y<n;y++) { sum=sum+s[x][y]*2; } } int q,w,min1=s[0][0]; for(q=0;q<n;q++) { w=q; if(s[q][w]<min1) min1=s[q][w]; } int v,f,min2=s[n][0]; for(v=n-1;v>=0;v--) { f=n-1-v; if(s[v][f]<min2) min2=s[v][f]; } int min; if(min1<min2) min=min1; else min=min2; int d; d=(n+n-1)*2*min; printf("%d\n",sum-d); return 0;}
思路是把所有的花都除掉,然后卖掉,再计算对角线上的价值,再减去
展开
 我来答
坤坤吃饭第一名
2017-03-12 · TA获得超过667个赞
知道小有建树答主
回答量:391
采纳率:66%
帮助的人:206万
展开全部
#include<stdio.h>
#include<stdlib.h>

#include<limits.h>

#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<n*n;++i)         //输入n*n个高度 
    { 
         scanf("%d",g+i);
         origin_sum+=g[i];       //求花圃原来总的高度。 
    }
    
    
    for(i=0;i<n;++i)
    {
        for(j=0;j<n;++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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式