2020蓝桥杯—校内模拟赛
题目:
小明有一块空地, 他将这块空地划分为n行m列的小块,每行和每列的长度都为1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月, 草都会向外长出一些,如果一个小块种了草,则它将向自己的上,下、 左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k个月后空地上哪些地方有草。
输入格式:
输入的第一行包含两个整数m,n。
接下来n行,每行包含m个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为g,表示种了草。
接下来包含一个整数k.
输出格式:
输出n行,每行包含m个字母,表示k个月后空地的状态。如果为小数点,表示为空地,如果字母为g表示长了草。
样例输入:
4 5
.g...
.....
...g.
.....
2
样例输出:
gggg.
ggggg
.gggg
..ggg
思路:
输入形式为String类型,但是String类型不方便进行修改操作,所以新建Char[]数组用来存放所有的标记。
n个月就是增加了n次草坪,进行n次循环,每次循环就是在每一个标记为g的地址,周围指定地址更改标记为g。
1 import java.util.Scanner;
2
3 public class Main{
4 public static void main(String[] args) {
5 Scanner scan = new Scanner(System.in);
6 int n = scan.nextInt();
7 int m = scan.nextInt();
8 String[] place = new String[n+1];
9 for(int i = 0; i< n; i++) {
10 place[i] = scan.next(); //输入地图
11 }
12 int month = scan.nextInt(); //输入月份
13
14 char[][] p = new char[n][m]; //地图转为二维数组p[n][m];
15 for(int i = 0; i<n; i++) {
16 for(int j = 0; j< m; j++) {
17 p[i][j] = place[i].charAt(j);
18 }
19 }
20 char[][] p2 = new char[n][m]; //暂存地p2
21 for(int t = 0; t< month; t++) {
22
23 for(int i = 0; i<n; i++) {
24 for(int j = 0; j< m; j++) {
25 if(p[i][j] == 'g') {
26 p2[i][j] = 'g';
27 if(i-1>=0) p2[i-1][j] = 'g';
28 if(i+1<n) p2[i+1][j] = 'g';
29 if(j-1>=0) p2[i][j-1] = 'g';
30 if(j+1<m) p2[i][j+1] = 'g';
31 }
32 }
33 }
34 for(int i = 0; i<n; i++) {
35 for(int j = 0; j< m; j++) {
36 p[i][j]=p2[i][j];
37 }
38 }
39 }
40 for(int i = 0; i<n; i++) {
41 for(int j = 0; j< m; j++) {
42 if(p[i][j] == 'g')System.out.print(p[i][j]);
43 else System.out.print(".");
44 }
45 System.out.println();
46 }
47 scan.close();
48 }
49 }