c - UVA 判断的运行时错误和同一问题的编码厨师的错误答案



这些是代码厨师和UVa在线裁判问题的链接

我的 C 代码是这样的:

#include <stdio.h>
int main() {
char c;
int n,m;
char d;
int field=1;

    scanf("%d",&n);
    scanf("%c",&d);//reading space
    scanf("%d",&m);

while(1){
    int arr[n][m];
    if(n==0 || m==0)
     break;
    int i,j;
    scanf("%c",&d); //reading a return(n)

for(i=0;i<n;i++){
    for(j=0;j<m;j++){
        scanf("%c",&c);
        if(c=='*'){
            arr[i][j]=-1;
        }
        else{
            arr[i][j]=0;
        }
    }       
        scanf("%c",&d); //reading a return(n)  
}


for(i=0;i<n;i++){
    for(j=0;j<m;j++){
        if(arr[i][j]==-1){
            if(0<=i-1 && arr[i-1][j]!=-1){
                arr[i-1][j]++;
            }
            if(0<=j-1 && arr[i][j-1]!=-1){
                arr[i][j-1]++;
            }
            if(i+1<n && arr[i+1][j]!=-1 ){
                arr [i+1][j]++;
            }
            if(j+1<m && arr[i][j+1]!=-1){
                arr [i][j+1]++;
            }
            if(j+1<m && i-1>=0 && arr[i-1][j+1]!=-1){
                arr[i-1][j+1]++;
            }
            if(j+1<m && i+1<n && arr[i+1][j+1]!=-1){
                arr[i+1][j+1]++;
            }
            if(0<=j-1 && 0<=i-1 && arr[i-1][j-1]!=-1){
                arr[i-1][j-1]++;
            }
            if(0<=j-1 && i+1<=n && arr[i+1][j-1]!=-1){
                arr[i+1][j-1]++;
            }
        }   
    }
}
printf("Field #%d:n",field++);
for(i=0;i<n;i++){
    for(j=0;j<m;j++){
        if(arr[i][j]==-1)
                printf("*");
        else        
        printf("%d",arr[i][j]);
    }
    printf("n");
}

    scanf("%d",&n);
    scanf("%c",&d);//reading a space
    scanf("%d",&m);
    if(n==0 || m==0) 
    break;

printf("n");
}


return 0;
}

我在UVA上收到运行时错误,在codechef上收到错误的答案。错误是什么?

你这里有一个错字:

if(0<=j-1 && i+1<=n && arr[i+1][j-1]!=-1){

i+1<=n应该像对待其他条件一样i+1<n

最新更新