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循环

posted @ 2025-07-14 18:25  ervgiu28hg34y827  阅读(10)  评论(0)    收藏  举报