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 }