大体思路就是通过四个判断来确定八向
#include<iostream>
using namespace std;
const int MAX =105;
char fx[MAX][MAX];
int main()
{
int n,m;
cin >> n >> m;
for(int i=0;i<n;i++)//全部输入
{
for(int j=0;j<m;j++)
{
cin >> fx[i][j];
}
}
for(int i=0;i<n;i++)//开始判断每一个元素
{
for(int j=0;j<m;j++)
{
int sum=0;//每一个元素的计数菌
if(fx[i][j]=='*')//是地雷直接输出
{
cout << '*';
}
else
{
int x1=-1,x2=1;//八向
int y1=-1,y2=1;
if(j==0)//判断边界
{
x1=0;
}
if(i==0)
{
y1=0;
}
if(j==m-1)
{
x2=0;
}
if(i==m-1)
{
y2=0;
}
for(int k=i+y1;k<=i+y2;k++)
{
for(int l=j+x1;l<=j+x2;l++)
{
if(fx[k][l]=='*')//查雷
{
sum+=1;
}
}
}
cout << sum;//输出排查雷数
}
}
cout << endl;//换行
}
return 0;
}