你输出 `dx[8]` 试试,你会发现是一堆乱码
枚举 $k$ 时从 $0 \sim 7$ 应该就没问题了
by liuruiqing @ 2024-04-17 19:27:35
@[unnamed_213](/user/992285)
by liuruiqing @ 2024-04-17 19:27:50
### 问题有如下两点:
#### 1. 偏移量错误,dx数组的倒数第二个少了个负号
------------
#### 2. 数组越界的问题出现在偏移量数组的枚举,代码中定义偏移量数组的格式下标是从0开始的,遍历却是从1开始的
------------
### AC代码如下:
```cpp
#include <iostream>
#define endl "\n"
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int dx[]={1, 1, 1, 0, -1, -1, -1, 0};
int dy[]={1, 0, -1, -1, -1, 0, 1, 1};
int n, m;
cin >> n >> m;
char ch[n+2][m+2];
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
cin >> ch[i][j];
for (int i=0; i<=n+1; i++)
ch[i][0]=ch[i][m+1]='?';
for (int i=0; i<=m+1; i++)
ch[0][i]=ch[n+1][0]='?';
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
{
if (ch[i][j]=='*')
{
cout << '*';
continue;
}
int cnt=0;
for (int k=0; k<8; k++)
if (ch[i+dx[k]][j+dy[k]]=='*')
cnt++;
cout << cnt;
}
cout << endl;
}
return 0;
}
```
by bulopi @ 2024-04-17 19:47:51
@[unnamed_213](/user/992285) (可以球个关吗?OvO)
by bulopi @ 2024-04-17 19:48:54
@[liuruiqing](/user/1118614) @[bulopi](/user/948361)
AC了
感谢大佬
by unnamed_213 @ 2024-04-17 20:30:23