解题思路:

注意事项:

在输入的时候可以按行输入(以字符串的形式),不用一个个输入

参考代码:

#include <stdio.h>

#include<string.h> 


int main()

{

int m,n,i,j,sum=0,k;

char field[100][100];

char res[100][100];

while(scanf("%d%d",&n,&m)==2&&m!=0&&n!=0)

{

sum++;

for(i=0;i<n;i++)

{

scanf("%s",field[i]);

}

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

{

if(field[i][j]!='*') 

{

k=0;

if(i-1>=0)//看这一格的上面是否有行 

{

if(j-1>=0)//看这一格的左边是否有行 

{

if(field[i-1][j-1]=='*')//这一行的左上角元素 

k++; 

}

if(field[i-1][j]=='*')//这一行的正上方元素 

k++;

if(j+1<m)//看一格的右边是否有行

{

if(field[i-1][j+1]=='*')//这一格的右上方元素 

{

k++;

}

}

if(j-1>=0)

{

if(field[i][j-1]=='*')//看这一格的左边元素 

k++;

}

if(j+1<m)

{

if(field[i][j+1]=='*')//看这一格的右边元素 

k++;

if(i+1<n)//看这一格的下一行 

{

if(j-1>=0)

{

if(field[i+1][j-1]=='*')//看这一格的左下方元素 

k++;

  } 

  if(field[i+1][j]=='*')//看这一格的正下方元素 

  k++; 

  if(j+1<m)

  {

  if(field[i+1][j+1]=='*')//看这一格的右下方元素 

  k++;

   } 

  } 

res[i][j]=k+'0';//重置这一格的内容 

}

else res[i][j]='*';

}

}

printf("Field #%d:\n",sum);

for(i=0;i<n;i++)

{

printf("%s\n",res[i]);

}

printf("\n");

}

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论