19~~
int i,j,n,m;
char arr[1001][1001];
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",arr[i]);//%s自动跳过换行符读取这一行字符∵输入无空格
}
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
//遍历
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(arr[i][j]'')
printf("");
else
{
int count=0;
for(int k=0;k<8;k++)
{
int x,y;
x=i+dx[k];
y=j+dy[k];
if(x>=0&&x<n&&y>=0&&y<m)
{
if(arr[x][y]'*')
count++;
}
}
printf("%d",count);
}
}
printf("\n");
}
return 0;
}
bug1:检查坐标是否在矩阵范围内,边缘的顶角的只有5,3个;将 printf("%d", count) 移入 else 块内部,确保只有非雷格子才输出数字,雷格子仅输出 * 。
收获:以dx[]dy[]表示坐标的偏移,![47fad0caf32b4a828f2becf25068edee]()
%s会自动跳过换行符,读取一行字符 }替代2个for循环

浙公网安备 33010602011771号