解析:  简单的一题。思路很明显:遍历所有的字符,若果是‘*’,就对他的四周的字符通通加1;

   但是有两点需要注意:1.要考虑边界问题

             2.加1时要避开地雷

   但是可以用一种特殊的技巧避开以上的问题。

    1.数组从第二位开始

    2.让地雷的字符远小于数字字符,这样最后只要它小于数字字符,就输出‘*’

 1 #include <stdio.h>
 2 int main()
 3 {
 4     char ch[105][105];
 5     int n, m, i, j, kase = 0;
 6     while(scanf("%d %d", &n, &m) == 2 && n && m){
 7         /*数组从第二位开始写入,防止出界*/
 8         for(i = 1; i <= n; i++){
 9             scanf("%s", ch[i]+1);
10             for(j = 1; j <= m; j++)
11                 if(ch[i][j] == '.')
12                     ch[i][j] = '0';
13                 else
14                     ch[i][j] = 10;  /*不错的技巧*/
15         }
16         for(i = 1; i <= n; i++)
17             for(j = 1; j <= m; j++)
18                 if(ch[i][j] < '0'){
19                     ch[i-1][j-1]++;
20                     ch[i-1][j]++;
21                     ch[i-1][j+1]++;
22                     ch[i][j-1]++;
23                     ch[i][j+1]++;
24                     ch[i+1][j-1]++;
25                     ch[i+1][j]++;
26                     ch[i+1][j+1]++;
27                 }
28         if(kase != 0)
29             printf("\n");
30         /*输出的最后一行和输出的第一行都没有空行*/
31         printf("Field #%d:\n", ++kase);
32         for(i = 1; i <= n; i++){
33             for(j = 1; j <= m; j++)
34                 if(ch[i][j] < '0')
35                     printf("*");
36                 else
37                     printf("%c", ch[i][j]);
38                 printf("\n");
39         }
40     }
41     return 0;
42 }