可以尝试运用动态创建二维数组,这样就不用自己设立最大值了,担心数据量过大
个人认为的优化措施:
1.直接判断左边(右边)是否越界,来减少代码的运行时间,比直接八个方向一个个判断要节省时间。
2.输出可以处理一个输出一个,没有必要存放起来再统一输出。
ac代码:
#include<iostream>
#include<iomanip>
#include<cstring>
#include<sstream>
#include<algorithm>
using namespace std;
int main(){
char **array=NULL;
int row;
int col;
cin>>row>>col;
array=new char*[row];
for(int i=0;i<row;i++){
array[i]=new char[col];
}
char ch;
int i=0,j=0;
while(cin>>ch){
array[i][j]=ch;
j++;
if(j==col){
j=0;
i++;
}
}
for(i=0;i<row;i++){
for(j=0;j<col;j++){
if(array[i][j]=='*'){
cout<<"*";
}else{
int n=i,m=j;
int sum=0;
if(m-1>=0){//判断左边三个位置
if(array[n][m-1]=='*'){
sum++;
}
if(n-1>=0){
if(array[n-1][m-1]=='*'){
sum++;
}
}
if(n+1<row){
if(array[n+1][m-1]=='*'){
sum++;
}
}
}
if(m+1<col){//判断右边三个位置
if(array[n][m+1]=='*'){
sum++;
}
if(n-1>=0){
if(array[n-1][m+1]=='*'){
sum++;
}
}
if(n+1<row){
if(array[n+1][m+1]=='*'){
sum++;
}
}
}
if(n-1>=0){//判断上面的位置
if(array[n-1][m]=='*'){
sum++;
}
}
if(n+1<row){//判断下面的位置
if(array[n+1][m]=='*'){
sum++;
}
}
cout<<sum;
}
}
cout<<endl;
}
system("pause");
return 0;
}