/* BC142 扫雷 */ #include <stdio.h> #include <string.h> #define MAXSIZE 1002 int main() { int n = 0, m = 0; char mine[MAXSIZE][MAXSIZE]; int nums[MAXSIZE][MAXSIZE]; int X_axis[8] = { -1, 0, 1, -1, 1, -1, 0, 1 }; int Y_axis[8] = { -1, -1, -1, 0, 0, 1, 1, 1 }; memset(mine, '.', sizeof(mine)); // 初始化 memset(nums, 0, sizeof(nums)); scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) { // 输入 char tmp = getchar(); // 最关键的一步,使用getcahr()还不行,还得用一个临时变量吸收\n, 否则\n会污染数组 for (int j = 1; j <= m; j++) { scanf("%c", &mine[i][j]); } } // 统计雷个数 for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(mine[i][j] == '*') for(int k = 0; k < 8; k++) nums[(X_axis[k] + i)][(Y_axis[k] + j)] += 1; } } // 输出数字矩阵 for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(mine[i][j] == '*') printf("*"); else printf("%d", nums[i][j]); } printf("\n"); } return 0; }