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;}
思路是把所有的花都除掉,然后卖掉,再计算对角线上的价值,再减去 展开
思路是把所有的花都除掉,然后卖掉,再计算对角线上的价值,再减去 展开
1个回答
展开全部
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询