解题思路:

注意事项:

参考代码:#include<stdio.h>
#include<stdlib.h>
int main()
{
 int row,col,field=0;
 int i,j,k,l,i1,j1,M=0;
 char *a[50][50];
 int b[50];
  for(i=0;i<50;i++)//录入每个filed的数据
 {
   scanf("%d %d",&row,&col);
  if((row==0)&&(col==0))
  {
   goto exit;
  }
  b[i]=row;
   field++;
   for(j=0;j<row;j++)//此处录入单个的field的值
   {
    a[i][j]=(char*)malloc(sizeof(char)*(col));
    scanf("%s",a[i][j]);
   }
   for(k=0;k<row;k++)//定位到单个filed中的每个的位,并为其赋新值
   {
    for(l=0;l<col;l++)
    {
     M=0;
     if(k==0)//第一行的情况
     {
      if(*(a[i][0]+l)=='*');
      if(*(a[i][0]+l)=='.')
      {
       if(l==0)
       {
        if(*(a[i][0]+1)=='*')
        M++;
        if(*(a[i][1]+l)=='*')
        M++;
        if(*(a[i][1]+1)=='*')
        M++;
       }
       else if(l==col-1)
       {
        if(*(a[i][0]+l-1)=='*')
        M++;
        if(*(a[i][1]+l-1)=='*')
        M++;
        if(*(a[i][1]+l)=='*')
        M++;
       }
       else
       {
        if(*(a[i][1]+l-1)=='*')
        M++;
        if(*(a[i][1]+l+1)=='*')
        M++;
        if(*(a[i][1]+l)=='*')
        M++;
        if(*(a[i][0]+l-1)=='*')
        M++;
        if(*(a[i][0]+l+1)=='*')
        M++;
       }
      }
     }
     else if(k==row-1)//最后一行的情况
     {
      if(*(a[i][k]+l)=='*');
      if(*(a[i][k]+l)=='.')
      {
       if(l==0)
       {
        if(*(a[i][k-1]+l+1)=='*')
        M++;
        if(*(a[i][k]+l+1)=='*')
        M++;
        if(*(a[i][k-1]+l)=='*')
        M++;
       }
       else if(l==col-1)
       {
        if(*(a[i][k-1]+l-1)=='*')
        M++;
        if(*(a[i][k-1]+l)=='*')
        M++;
        if(*(a[i][k]+l-1)=='*')
        M++;
       }
       else
       {
        if(*(a[i][k-1]+l-1)=='*')
        M++;
        if(*(a[i][k-1]+l+1)=='*')
        M++;
        if(*(a[i][k-1]+l)=='*')
        M++;
        if(*(a[i][k]+l-1)=='*')
        M++;
        if(*(a[i][k]+l+1)=='*')
        M++;
       }
      }
     }
     else//中间行的情况
     {
       if(*(a[i][k]+l)=='*');
      if(*(a[i][k]+l)=='.')
      {
       if(l==0)//靠左计算
       {
        if(*(a[i][k-1]+l)=='*')
        M++;
        if(*(a[i][k-1]+l+1)=='*')
        M++;
        if(*(a[i][k]+l+1)=='*')
        M++;
        if(*(a[i][k+1]+l)=='*')
        M++;
        if(*(a[i][k+1]+l+1)=='*')
        M++;
       }
       else if(l==col-1)//靠右计算
       {
        if(*(a[i][k-1]+l)=='*')
        M++;
        if(*(a[i][k-1]+l-1)=='*')
        M++;
        if(*(a[i][k]+l-1)=='*')
        M++;
        if(*(a[i][k+1]+l)=='*')
        M++;
        if(*(a[i][k+1]+l-1)=='*')
        M++;
       }
       else//靠中列的计算
       {
       for(i1=k-1;i1<=k+1;i1++)
       {
        for(j1=l-1;j1<=l+1;j1++)
        {
         if(*(a[i][i1]+j1)=='*')
         M++;
        }
       }
       }
      }
     }
     if(*(a[i][k]+l)=='.')
     {
     *(a[i][k]+l)=48+M;
     }
    }
    }
 }//结束!
 exit:
 for(i=0;i<field;i++)//输出结果
  {
   printf("Field #%d:\n",i+1);
   for(j=0;j<b[i];j++)
   {
   printf("%s",a[i][j]);
   printf("\n");
   }
   printf("\n");
   }
    for(i=0;i<field;i++) //释放空间
  {
   for(j=0;j<b[j];j++)
   {
    free(a[i][j]);
   }
   }  
 return 0;
 }

点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论