🔥博客主页🔥:【 坊钰_CSDN博客 】
欢迎各位点赞👍评论✍收藏⭐
目录
1. 题目
2. 解析
3. 代码
4. 小结
1. 题目
小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵,他希望你帮他生成一个扫雷矩阵。
扫雷矩阵的每一行每一列都是一个数字,每个数字的含义是与当前位置相邻的8个方向中,有多少个雷(在下图中,雷用*表示);如果当前位置就是雷的话,仍输出一个*。
比如初始的雷矩阵如下:
....
..**
*.*.
.*.*
对应的数字矩阵为:
0122
13**
*4*4
2*3*
例:
输入:
4 4 .... ..** *.*. .*.*输出:
0122
13**
*4*4
2*3*
2. 解析
1. 由于输入的都是一些特殊字符,如:‘ * ’ ‘ . ’,但在scanf () 函数连续输出字符时,换行符‘ \n ’ 会被scanf () 函数读取,故需要用 getchar () 来读取换行符 ‘ \n ’ ,更详细的可参考-->getchar() 替scanf () 函数读取换行符 博客
2. 由于我们要统计雷的数量,所以在初始化时,要往外多一行,即:
3. 代码
#include <stdio.h>
int Cheak_min(int arr[1000][1000], int i, int j)//找雷
{
return (arr[i - 1][j - 1] + arr[i][j - 1] + arr[i + 1][j - 1] +
arr[i - 1][j] + arr[i][j] + arr[i + 1][j] +
arr[i - 1][j + 1] + arr[i][j + 1] + arr[i + 1][j + 1]);
}
int main()
{
int n = 0;
int m = 0;
int arr[1000][1000] = { 0 };
char ch = 0;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) //i=1,多初始化了一行
{
getchar();//读取换行符'\n'
for (int j = 1; j <= m; j++)//j=1,多初始化了一列
{
scanf("%c", &ch);
if (ch == '*') //换元的思想,把雷都设为数字 1
arr[i][j] = 1;
else
arr[i][j] = 0;
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (arr[i][j] == 1)//判断
printf("*");
else
printf("%d", Cheak_min(arr, i, j)); //找周围雷的个数
}
printf("\n");
}
return 0;
}
4. 小结
以上就是关于扫雷的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!