蓝桥模拟赛 小明的空地 JAVA

小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月,草都会向外长出一些,
如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k 个月后空地上哪些地方有草。
思路:四个方向,二维数组接受数据,定义一个临时的二维数组,用于循环每个月那个位置长草了,然后接受他输入的数据,遍历寻找 g 找到以后判断四个方向上下左右,给临时的数组坐标变成g,如果超过边界,就不用变成g了,一直到循环结束是这个月的那个位置长了草,然后遍历接受的那个数据里面。
以上思路来自我的一位不愿透露姓名的大哥所教,超级感谢!!虽然还是有点迷??哈哈哈哈哈哈哈…

import java.util.Scanner;

public class Main {

	static int k;//全局 月

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int[][] direction = new int[][] { { 0, -1 }, { 0, 1 }, { -1, 0 }, { 1, 0 } }; // 四个方向
		int n = scanner.nextInt();    // 行
		int m = scanner.nextInt();    // 列
		char[][] g = new char[n][m];  // 草
		int[][] arr = new int[n][m];  // 临时
		for (int i = 0; i < n; i++) {
			g[i] = scanner.next().toCharArray(); // 强转字符数组
		}
		k = scanner.nextInt();        // 月
		int index = 0; 
		while (index < k) {
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < m; j++) {
					if (g[i][j] == 'g') {
						for (int k = 0; k < direction.length; k++) {
							int x = i + direction[k][0];
							int y = j + direction[k][1];
							if (x >= 0 && y >= 0 && x < n && y < m && g[x][y] == '.') {//空地
								arr[x][y] = 1;   //标记长草
							}
						}
					}
				}
			}
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < m; j++) {
					if (arr[i][j] != 0) {
						g[i][j] = 'g';  // 原来
					}
				}
			}
			index++;
		}
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				System.out.print(g[i][j]);//输出即可
			}
			System.out.println();
		}
	}
}

小剧场:你过的好吗?我们都别说谎!小明,长草的空地,抓虫快乐否?

发布了161 篇原创文章 · 获赞 120 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43771695/article/details/104864079