题解 | #扫雷#
扫雷
https://www.nowcoder.com/practice/d5f277427d9a4cd3ae60ea6c276dddfd
#include <stdio.h> int main() { int n, m; scanf("%d %d\n", &n, &m); /* 根据输入的行列值声明数组 */ char arr[n][m]; for(int j=0; j<n; j++) /* 向数组中填入数据 */ { for(int i=0; i<m; i++) { scanf("%c", &arr[j][i]); } getchar(); /* 排除回车的干扰 */ } for(int j=0; j<n; j++) /* 从数组的第一个元素开始判断转换输出字符 */ { for(int i=0; i<m; i++) { if(arr[j][i] == '*') /* 该元素是地雷就直接输出 */ { printf("*"); } else { int sum = 0; /* 用于记录该元素相邻位置的地雷数量 */ for (int r=j-1; r<=j+1; r++) { for(int w=i-1; w<=i+1; w++) { if(r>=0 && r<n && w>=0 && w<m) /* 该元素如果已经处于数组的边缘 就只判断数组有效下标 */ { if(arr[r][w] == '*') { sum++; } } } } printf("%d", sum); /* 输出统计值 */ } } printf("\n"); } }