题解:
#include <bits/stdc++.h>
using namespace std;
const int N = 150,M = 150;//数据的规模没要求
int a[N][M];//原数组
int ans[N][M];//目标数组
//用原数组做判断,可以省去很多步骤
//当数组、容器在函数外(包括主函数)时,元素初值为0。在函数内元素为随机
int main()
{
int n, m;cin >> n >> m;
for(int i = 1; i <= n; i++)//for的初值是1,最好养成习惯
{
for(int j = 1; j <= m; j++)
{
cin >> a[i][j];
}
}//创建数组
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j ++)
{
if(a[i][j] == 1)
{
ans[i][j] = 9;//用原数组做判断,可以省去很多步骤
continue;
}
//遍历九宫格,max和min表示在边缘情况时遍历部分的选择
for(int _i = max(1, i - 1); _i <= min(n, i + 1); _i++)
{
for(int _j = max(1, j - 1); _j <= min(m, j + 1); _j++)
{
if(a[_i][_j])
{
ans[i][j]++;
}
}
}
}
}
for(int i = 1; i <= n; i++)
{
for(int j =1; j <= m; j++)
{
cout << ans[i][j] << ' ';
}
cout << "\n";
}
return 0;
}