题目
Time limit: 3.000 seconds
解题思路
1.这里不涉及什么技巧,用循环不断加即可,注意越界
2.需要注意的是输入和输出格式。输入的时候最好用scanf,它以空白字符作为结束符;输出的时候注意空格:答案之间有空格,但是最后一个答案之后不能有空格,否则会错。提交的两次错误都在输出格式上
3.时间复杂度Θ(n*m),空间复杂度Θ(n*m)
通过代码
#include<stdio.h>
char field[105][105];
int main(){
int n,m;
int i,j;
int x=0;
#ifdef DEBUG
freopen("input.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
while(true)
{
scanf("%d%d",&n,&m);
if(n*m==0)
break;
for(i=0;i<n;++i)
{
scanf("%s",field[i]);
for(j=0;j<m;++j)
if(field[i][j]=='.')
field[i][j]='0';
}
for(i=0;i<n;++i)
for(j=0;j<m;++j)
if(field[i][j]=='*')
{
int r1=i-1>=0?i-1:0;
int r2=i+1<n?i+1:n-1;
int c1=j-1>=0?j-1:0;
int c2=j+1<m?j+1:m-1;
for(int a=r1;a<=r2;++a)
for(int b=c1;b<=c2;++b)
if(field[a][b]!='*')
field[a][b]++;
}
if(x!=0)
printf("\n");
printf("Field #%d:\n",++x);
for(i=0;i<n;++i)
{
for(j=0;j<m;++j)
printf("%c",field[i][j]);
printf("\n");
}
}
return 0;
}