解题思路:
注意事项:
参考代码:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 雷区行数
int m = sc.nextInt(); // 雷区列数
char[][] arr = new char[n][m]; // 存储雷区地雷分布
char[][] arr1 = new char[n][m]; // 存储雷区周围格地雷数
// 读入雷区地雷分布
for (int i = 0; i < n; i++) {
String line = sc.next();
for (int j = 0; j < m; j++) {
arr[i][j] = line.charAt(j);
}
}
// 遍历雷区每个非地雷格,计算周围格地雷数
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] == '*') { // 如果是地雷格,直接填充 *
arr1[i][j] = '*';
} else { // 如果是非地雷格,计算周围格地雷数
int count = 0; // 周围格地雷数
for (int k = -1; k <= 1; k++) { // 遍历周围 8 个格
for (int l = -1; l <= 1; l++) {
if (k == 0 && l == 0) { // 中心格不做处理
continue;
}
int row = i + k;
int col = j + l;
if (row >= 0 && row < n && col >= 0 && col < m && arr[row][col] == '*') {
count++; // 如果周围格是地雷,计数器加1
}
}
}
arr1[i][j] = (char) ('0' + count); // 数字字符的 ASCII 码比数字小 48
}
}
}
// 输出雷区,非地雷格显示周围格地雷数,地雷格显示 *
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(arr1[i][j]);
}
System.out.println();
}
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复