题解 | #扫雷#
扫雷
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");
}
}
查看13道真题和解析