解题思路:直接解,最直接的就是判断它周围的8个是否存在‘*’号,也就是8种情况(最外围的没有8个,需要判断),每存在一个就记录一个,有多少个就记录多少个,只需判断 i 和 j 的取值范围。例如我的是数组,
那么i-1>=0 ,i+1<=a-1,j-1>=0,j+1<=b-1,保证在数组下表范围内。
注意事项:
参考代码:
数组 | ||||
i-1, j-1 | i-1, j | i-1, j+1 | ||
i, j-1 | i, j | i, j+1 | ||
i+1, j-1 | i+1, j | i+1, j+1 | ||
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
char s[1000][1000];
int a,b,n,i,j,k=1;
while(1)
{
cin>>a>>b;
if(a==0 && b==0) break;
int d=0,w=0;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
cin>>s[i][j];
cout<<"Field #"<<k<<":"<<endl;
k++;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
d=0;
int flag=1;
if(s[i][j]=='*') {cout<<"*";continue;}//continue直接下一个循环 不会执行后面的if
if(i-1>=0 && j-1>=0 && s[i-1][j-1]=='*') {d++;flag=0;}
if(i-1>=0 && s[i-1][j]=='*') {d++;flag=0;}
if(i-1>=0 && j+1<=b-1 && s[i-1][j+1]=='*') {d++;flag=0;}
if(j-1>=0 && s[i][j-1]=='*') {d++;flag=0;}
if(j+1<=b-1 && s[i][j+1]=='*') {d++;flag=0;}
if(i+1<=a-1 && j-1>=0 && s[i+1][j-1]=='*') {d++;flag=0;}
if(i+1<=a-1 && s[i+1][j]=='*') {d++;flag=0;}
if(i+1<=a-1 && j+1<=b-1 && s[i+1][j+1]=='*'){d++;flag=0;}
if(flag==1)
cout<<0;
else
cout<<d;
}
cout<<endl;
}
cout<<endl;
}
return 0;
}
0.0分
0 人评分