自己验证没问题,提交就是结果错误!!(纯初学者)

img

img


下面是我的代码


#include<stdio.h>
int main()
{
    int m,n,x,i,j,count=0,is=0;
    scanf("%d %d %d",&n,&m,&x);
    getchar();
    char a[n][m],b;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%c",&a[i][j]);
        }
        getchar();
    }
    int s[n][m];
    i=0,j=x-1; 
    while(s[i][j]!=1&&i>=0&&j>=0)
    {
        switch (a[i][j])
        {
            case 'N' :i--;count++;break;
            case 'S' :i++;count++;break;
            case 'E' :j++;count++;break;
            case 'W' :j--;count++;break;
        }
    }
    if(s[i][j]==1) printf("loop %d",count);
    else printf("out %d",count);
    return 0;
}

int s[n][m]; 数组要把初始值都设置为0。如果不设置数组初始值可能是随机的
并且你每次循环都要把s[i][j]赋值为1,表示这个格子已经走过了

你题目的解答代码如下:

#include<stdio.h>
int main()
{
    int m,n,x,i,j,count=0,is=0;
    scanf("%d %d %d",&n,&m,&x);
    getchar();
    char a[n][m],b;
    int s[n][m];
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%c",&a[i][j]);
            s[i][j] = 0;
        }
        getchar();
    }
    i=0,j=x-1;
    while(s[i][j]!=1 && i>=0 && i<n && j>=0 && j<m)
    {
        s[i][j] = 1;
        switch (a[i][j])
        {
            case 'N' :i--;count++;break;
            case 'S' :i++;count++;break;
            case 'E' :j++;count++;break;
            case 'W' :j--;count++;break;
        }
    }
    if(s[i][j]==1) printf("loop %d",count);
    else printf("out %d",count);
    return 0;
}

img

如有帮助,望采纳!谢谢!