#include <stdio.h> int main() { int n, m; scanf("%d%d", &n, &m); char arr[1000][1000]={0};//如果这里写arr[n+2][m+2]的话不可以直接初始化,如果不初始化那么多的两行随机生成字符,有可能随机为'*',所以必须初始化!!! for (int i = 1; i <= n; i++)//赋值内圈(去掉外围一圈) { for (int j = 1; j <= m; j++) { scanf(" %c ", &arr[i][j]); } } for (int i = 1; i <= n; i++)//遍历内圈所有元素 { for (int j = 1; j <= m; j++)//遍历内圈所有元素 { if (arr[i][j] != '*')//判断是否为*,如果不是,就计算周围有多少个(九宫格计算) { int count = 0;//遍历该元素九宫格,如果是count++。 for (int q = i - 1; q <= i + 1; q++) { for (int p = j - 1; p <= j + 1; p++) { if (arr[q][p] == '*') count++; } } printf("%d",count);//打印周围有几个雷 } else { printf("*");//打印雷 } } printf("\n"); } return 0; }