题解 | #扫雷#
扫雷
http://www.nowcoder.com/practice/d5f277427d9a4cd3ae60ea6c276dddfd
import java.util.Scanner;
/**
* int output(int x, int y, int z, int k, char ch[][k]) {
* int count = 0;
* //在当前值周围进行循环判断
* for (int i = x - 1; i <= x + 1; i++) {
* for (int j = y - 1; j <= y + 1; j++) {
* //若有*且不超出矩阵范围,地雷加1
* if (ch[i][j] == '*' && i >= 0 && i < z && j >= 0 && j < k)
* count++;
* }
* }
* return count; //返回地雷数
* }
* int main() {
* int n, m, count = 0;
* scanf("%d %d\n", &n, &m);
* char ch[n][m];
* //依次输入字符
* for (int i = 0; i < n; i++) {
* for (int j = 0; j < m; j++) {
* scanf("%c ", &ch[i][j]);
* }
* }
* //依次判断并输出字符
* for (int i = 0; i < n; i++) {
* for (int j = 0; j < m; j++) {
* if (ch[i][j] != '*') { //字符不为*时,计算当前值应为多少
* ch[i][j] = output(i, j, n, m, ch); //字符替换地雷数值
* printf("%d", ch[i][j]); //输出当前值
* } else printf("%c", ch[i][j]); //字符为*时,直接输出
* }
* printf("\n");
* }
* return 0;
* }
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
char[][] a = new char[n][m];
for (int i = 0; i < a.length; i++) {
String s = sc.next();
a[i] = s.toCharArray();
}
// 打印出数组
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] == '*') {
System.out.print('*');
continue;
}
// 查看周围
int count = 0; // 周围是否有雷
// 本来是分别写的后来为了方便就写成了循环
// 查看上面和左上/右上
// if (i - 1 >= 0 ) {
// if (a[i - 1][j] == '*') {
// count ++;
// }
// // 左上
// if (j - 1 >= 0) {
// if (a[i - 1][j - 1] == '*') {
// count ++;
// }
// }
// // 右上
// if (j + 1 < a[i].length) {
// if (a[i - 1][j + 1] == '*') {
// count ++;
// }
// }
// }
// // 查看下面,左下,右下
// if (i + 1 < a.length) {
// if (a[i + 1][j] == '*') {
// count++;
// }
// // 左下
// if (j - 1 >= 0) {
// if (a[i + 1][j - 1] == '*') {
// count++;
// }
// }
// // 右下
// if (j + 1 < a[i].length) {
// if (a[i + 1][j + 1] == '*') {
// count++;
// }
// }
// }
// // 查看左面
// if (j - 1 >= 0) {
// if (a[i][j - 1] == '*') {
// count++;
// }
// }
// // 查看右面
// if (j + 1 < a[i].length) {
// if (a[i][j + 1] == '*') {
// count++;
// }
// }
// 循环写法,但是后来是遇到超时问题(后来找了现有的题解,发现了一个c写法的,和我这个是一样的,可以运行)
// 在本地ide中运行结果是没有问题的
for (int x = i - 1; x <= i + 1; x++) {
if (x < 0 || x >= n) {
continue;
}
for (int y = j - 1; y <= j + 1; y++) {
if (y < 0 || y >= m) {
continue;
} else if (a[x][y] == '*') {
count++;
}
}
}
System.out.print(count);
}
System.out.println();
}
}
}