版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
解题思路:需要保证第一行、第一列、最后一列和最后一行是’.’字符,需要使用两个二维字符数组分别存储原来的和变化的。算法渣渣当时只想到这种简单思维的做法,欢迎大牛留言更好的想法。
import java.util.Scanner;
/**
* 2018蓝桥杯Java B组 全球变暖问题:
* 条件:
.代表海洋像素,#代表像素,相连的一块#代表岛屿,如果陆地像素左右上下某个方向有海洋便会被淹没成海洋
输入:
7
.......
.##.....
.##.....
...##..
..###...
...##..
.......
输出:
.......
.......
.......
.......
...#...
.......
.......
* Created by XQM on 2018/4/2.
*/
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//输入n构成n*n二维数组
String[] s = new String[n];
char[] c;
char[][] a = new char[n][n];//存储输入的字符
char[][] b = new char[n][n];//存储输出的字符
//输入
for (int i = 0;i < n;i++){
s[i] = sc.next();
c = s[i].toCharArray();
for (int j = 0; j < n;j++){
a[i][j] = c[j];
b[i][j] = c[j];
}
}
char temp;
//题目的要求是第一行、第一列、最后一行、最后一列都是.
for (int i = 0;i < n;i++){
for (int j = 0; j < n;j++){
if (i != 0 && i != 6 && j != 0 && j != 6){
temp = a[i][j];
if (temp == '#'){
if ((temp != a[i][j-1]) || (temp != a[i-1][j]) || (temp != a[i][j+1]) || (temp != a[i+1][j])){
b[i][j] = '.';
}
}
}else {
b[i][j] = '.';
}
}
}
//输出
for (int i = 0;i < n;i++){
for (int j = 0; j < n;j++){
System.out.print(b[i][j]);
}
System.out.println();
}
}
}
输入输出如下图: