本文主要是介绍蓝桥杯:每周一题之Mineweep(扫雷)问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我的博客:https://blog.csdn.net/txb116424
学习资料和练习题目地址: http://dasai.lanqiao.cn/pages/dasai/news_detail_w.html?id=644
[问题描述]:
扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0<n,m<=100
输入格式
输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m,分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用’*'表示。当n=m=0时输入结束。
输出格式
对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的’.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。
样例输入
4 4
…
…
.…
…
3 5
**…
…
.*…
0 0
样例输出
Field #1:
100
2210
110
1110
Field #2:
**100
33200
1*100
(注意两个矩阵之间应该有一个空行,由于oj的格式化这里不能显示出来)
数据规模和约定
0<n,m<=100
import java.util.Scanner;public class Mineweep {public static void main(String[] args) {Scanner in = new Scanner(System.in);int count = 0;while (true) {int m = in.nextInt();int n = in.nextInt();if (n == 0 && m == 0) {System.out.println("程序退出");break;}count++;char arr[][] = new char[m][n];//特别注意二维字符数组的输入for (int i = 0; i < m; i++) {String string = in.next();char[] temp = string.toCharArray();for (int j = 0; j < n; j++) {arr[i][j] = temp[j];}}System.out.println("Field #" + count);for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (arr[i][j] == '.') {System.out.print(fun(arr, i, j, m, n) + " ");} else if (arr[i][j] == '*') {System.out.print("* ");}}System.out.println();}System.out.println();}}public static int fun(char arr[][], int i, int j, int m, int n) {int num = 0;//用循环遍历每个单位周围8个单元,如果是*则计数器加1.for (int a = i - 1; a <= i + 1; a++) {for (int b = j - 1; b <= j + 1; b++) {if (a >= 0 && a < m && b >= 0 && b < n && arr[a][b] == '*') {num++;}}}return num;}
}
这篇关于蓝桥杯:每周一题之Mineweep(扫雷)问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!