A45694. 扫雷游戏地雷数计算扫雷游戏是一款十分经典的单机小游戏。 它的精髓在于, 通过已翻开格子所提示的周围格地雷数, 来判断未翻开格子里是否是地雷。现在给出 n 行 m 列的雷区中的地雷分布, 要求计算出每个非地雷格的周围格地雷数。注: 每个格子周围格有八个: 上、 下、 左、 右、 左上、 右上、 左下、右下。 65536输入第一行包含两个整数 n 和 m, 分别表示雷区…
填空题
较易
知识点
题目描述
扫雷游戏地雷数计算
扫雷游戏是一款十分经典的单机小游戏。 它的精髓在于, 通过已翻开格子所提示的周围格地雷数, 来判断未翻开格子里是否是地雷。现在给出 n 行 m 列的雷区中的地雷分布, 要求计算出每个非地雷格的周围格地雷数。
注: 每个格子周围格有八个: 上、 下、 左、 右、 左上、 右上、 左下、右下。
时间限制: 1000
内存限制: 65536
输入
第一行包含两个整数 n 和 m, 分别表示雷区的行数和列数。 1 <= n <=100, 1 <= m <= 100。 接下来 n 行, 每行 m 个字符, ‘*’ 表示相应格子中是地雷,‘? ’ 表示相应格子中无地雷。 字符之间无任何分隔符。
输出
n 行, 每行 m 个字符, 描述整个雷区。 若相应格中是地雷, 则用‘*’表示, 否则用相应的周围格地雷数表示。 字符之间无任何分隔符。
样例输入
3 3
*??
???
?*?
样例输出
*10
221
1*1
参考答案
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int sum=0;
char a[][]=new char[n][m];
for(int i=0;i<n;i++) {
String b=in.next();
for(int j=0;j<m;j++) {
a[i][j]=b.charAt(j);
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(a[i][j]=='*') {
System.out.print("*");
}
else {
if(i-1>=0&&j+1<m) {
if(a[i-1][j+1]=='*') {
sum++;
}
}
if(j+1<m) {
if(a[i][j+1]=='*') {
sum++;
}
}
if(i-1>=0) {
if(a[i-1][j]=='*') {
sum++;
}
}
if(i+1<n&&j-1>=0) {
if(a[i+1][j-1]=='*') {
sum++;
}
}
if(i+1<n) {
if(a[i+1][j]=='*') {
sum++;
}
}
if(j-1>=0) {
if(a[i][j-1]=='*') {
sum++;
}
}
if(i-1>=0&&j-1>=0) {
if(a[i-1][j-1]=='*') {
sum++;
}
}
if(i+1<n&&j+1<m) {
if(a[i+1][j+1]=='*') {
sum++;
}
}
System.out.print(sum);
}
sum=0;
}
System.out.println();
}
}
}
上一题
下一题