种草问题java,2020年蓝桥杯第十一届校内赛真题解析--算法设计--种草问题

2020年蓝桥杯第十一届校内赛真题解析--算法设计--种草问题

比赛记录

本人于2020年3月14日14:00~18:00,参加了本校组织的校内模拟赛 。

本次校内模拟赛的感受较好,我觉得这次的难度适中,大家应该都可以取得自己理想的成绩。

问题描述

小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。

小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。

这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。

请告诉小明,k 个月后空地上哪些地方有草。

输入格式

输入的第一行包含两个整数 n, m。

接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。

接下来包含一个整数 k。

输出格式

输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。

样例输入

4 5

.g…

…g…

2

样例输出

gggg.

gggg.

ggggg

.ggg.

评测用例规模与约定

对于 30% 的评测用例,2 <= n, m <= 20。

对于 70% 的评测用例,2 <= n, m <= 100。

对于所有评测用例,2 <= n, m <= 1000,1 <= k <= 1000。

解析

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sr = new Scanner(System.in);

int n=sr.nextInt();

int m=sr.nextInt();

String[] str=new String[n+1];

for(int i=0;i

{

str[i]=sr.next();

}

char[][] arr=new char[n+1][m+1];

char[][] arr2=new char[n+1][m+1];

int k=sr.nextInt();//月数

for(int i=0;i

{

for(int j=0;j

{

arr[i][j]=str[i].charAt(j);//转换成字符数组

}

System.out.println();

}

//转移数组以便重复操作;

for(int i=0;i

{

for(int j=0;j

{

arr2[i][j]=arr[i][j];

}

System.out.println();

}

//根据月数来操作空地改变

for(int l=0;l

{

for(int i=0;i

{

for(int j=0;j

{

if(arr[i][j]=='g')

{

if(i>0)

arr2[i-1][j]='g';//上

if(i

arr2[i+1][j]='g';//下

if(j>0)

arr2[i][j-1]='g';//左

if(j

arr2[i][j+1]='g';//右

}

}

System.out.println();

}

//更新arr数组以便下次遍历

for(int i=0;i

{

for(int j=0;j

{

arr[i][j]=arr2[i][j];

}

System.out.println();

}

}

for(int i=0;i

{

for(int j=0;j

{

System.out.print(arr2[i][j]);

}

System.out.println();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值