我正在研究在线评判的问题(链接here),每次提交解决方案时,我都会收到运行时错误判断。我一直在看它一段时间,我仍然无法弄清楚它有什么问题。我还查看了运行时错误背后的典型原因(数组超出绑定,超出内存限制,逻辑错误等等)。我在下面发布的代码中找不到任何一个:
#include<stdio.h>
int Hall[110][110];
int isValid(int x, int y){
int i,j,cnt=0;
for(i=x-1; i<=x+1; i++)
for(j=y-1; j<=y+1; j++)
if(Hall[x][y]==Hall[i][j])
cnt++;
if(cnt>1)
return 0;
else
return 1;
}
int notChecked(int N,int* checked,int size){
int i;
for(i=0; i<size; i++)
if(checked[i] == N)
return 0;
return 1;
}
int main (void){
int T,R,C,checked[110],i,j,k,size;
scanf("%d",&T);
for(i=0; i<T; i++){
scanf("%d %d",&R,&C);
//initialize
size=0;
for(j=0; j<R*C; j++) checked[j] = -1;
for(j=0; j<=C+1; j++){
Hall[0][j] = -1;
Hall[R+1][j] = -1;
}
for(j=0; j<=R+1; j++){
Hall[j][0] = -1;
Hall[j][C+1] = -1;
}
//read input
for(j=1; j<=R; j++)
for(k=1; k<=C; k++)
scanf("%d",&Hall[j][k]);
//algo:
for(j=1; j<=R; j++)
for(k=1; k<=C; k++)
if(Hall[j][k]>=0){
if(notChecked(Hall[j][k],checked,size)){
if(isValid(j,k)==0){
checked[size] = Hall[j][k];
size++;
}
}
}
printf("%d\n",size);
}
return 0;}
非常感谢任何帮助!
答案 0 :(得分:0)
您需要对输入进行边界检查。
根据网站T
需要介于1到100之间,所以您需要检查一下。然后,对于网站上的每个R
和C
(N
和M
),它们也需要介于1和100之间。
对于每组R
个C
条目,您需要确保实际读入R
行和C
列。您还需要确保阅读T
个总条目。
答案 1 :(得分:0)
解决了问题!
代码中包含一个没有债券问题的数组,如下所示:
for(j=0; j<R*C; j++) checked[j] = -1;
知道检查的尺寸为110,R和C的最大尺寸为100。我将check的大小更改为10100并且有效。
感谢@chux的帮助!