#include<bits/stdc++.h> using namespace std; int s[101][101]; int main() { int n,m; char a; cin>>n>>m; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>a; if(a=='*') { s[i][j]=-1000; s[i-1][j-1]++; s[i-1][j]++; s[i-1][j+1]++; s[i][j-1]++; s[i][j+1]++; s[i+1][j-1]++; s[i+1][j]++; s[i+1][j+1]++; } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cout<<s[i][j]; } cout<<endl; } return 0; } 有什么问题
时间: 2024-03-09 17:50:21 浏览: 63
这段代码主要用于统计一个字符矩阵中每个格子周围八个格子中出现的字符 '*' 的个数,并将这些个数存储在一个二维数组 s 中。但是这段代码存在以下问题:
1. 数组 s 的大小应该为 n*m,而不是 n*n。
2. 在统计周围八个格子中出现的字符 '*' 的个数时,对于边界上的格子会存在下标越界的问题,需要特判。
3. 输入的字符矩阵中应该有空格分隔,否则会导致输入错误。
下面是修改后的代码:
```c++
#include<bits/stdc++.h>
using namespace std;
int s[101][101];
int main()
{
int n, m;
char a;
cin >> n >> m;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
cin >> a;
if(a == '*')
{
s[i][j] = -1000;
for(int k = max(0, i - 1); k <= min(n - 1, i + 1); k++)
{
for(int l = max(0, j - 1); l <= min(m - 1, j + 1); l++)
{
s[k][l]++;
}
}
}
}
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
cout << s[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
在修改后的代码中,我们使用了 min 和 max 函数来判断边界,避免了下标越界的问题。同时,在输出结果时,我们使用空格分隔,便于观察。
阅读全文