就是最简单地列举所有情况一一做:
#include<iostream>
using namespace std;
char a[101][101];
int b[101][101];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
b[i][j]=0;
for(int i=1;i<n-1;i++)
for(int j=1;j<m-1;j++)
{
if(a[i][j]=='*')
{
//cout<<"中间部分加了一"<<endl;
b[i][j]=-99;
b[i][j+1]++;
b[i][j-1]++;
b[i+1][j]++;
b[i-1][j]++;
b[i+1][j+1]++;
b[i-1][j+1]++;
b[i+1][j-1]++;
b[i-1][j-1]++;
}
}
for(int j=1;j<m-1;j++)//去除了四个角上下两行
{
if(a[0][j]=='*')
{
//cout<<"上行加了一"<<endl;
b[0][j]=-99;
b[0][j-1]++;
b[0][j+1]++;
b[1][j]++;
b[1][j-1]++;
b[1][j+1]++;
}
if(a[n-1][j]=='*')
{
//cout<<"下行加了一"<<endl;
b[n-1][j]=-99;
b[n-1][j-1]++;
b[n-1][j+1]++;
b[n-2][j]++;
b[n-2][j-1]++;
b[n-2][j+1]++;
}
}
for(int i=1;i<n-1;i++)//去除了四个角左右两列
{
if(a[i][0]=='*')
{
//cout<<"左列加了一"<<endl;
b[i][0]=-99;
b[i-1][0]++;
b[i+1][0]++;
b[i][1]++;
b[i-1][1]++;
b[i+1][1]++;
}
if(a[i][m-1]=='*')
{
//cout<<"右列加了一"<<endl;
b[i][m-1]=-99;
b[i-1][m-1]++;
b[i+1][m-1]++;
b[i][m-2]++;
b[i-1][m-2]++;
b[i+1][m-2]++;
}
}
if(a[0][0]=='*')//四个角
{
//cout<<"左上角加了一"<<endl;
b[0][0]=-99;
b[1][0]++;
b[1][1]++;
b[0][1]++;
}
if(a[n-1][0]=='*')
{
//cout<<"左下角加了一"<<endl;
b[n-1][0]=-99;
b[n-1][1]++;
b[n-2][1]++;
b[n-2][0]++;
}
if(a[0][m-1]=='*')
{
//cout<<"右上角加了一"<<endl;
b[0][m-1]=-99;
b[1][m-1]++;
b[1][m-2]++;
b[0][m-2]++;
}
if(a[n-1][m-1]=='*')
{
//cout<<"右下角加了一"<<endl;
b[n-1][m-1]=-99;
b[n-1][m-2]++;
b[n-2][m-1]++;
b[n-2][m-2]++;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(b[i][j]<0)
cout<<"*";
else
cout<<b[i][j];
}
cout<<endl;
}
return 0;
}
其他点都过了,就第九个点,不理解,下载了数据点也全是乱码,完全没有*和?,求助大佬。