Blue Bridge Cup: Long Grass (análisis detallado)

tema

[Descripción del problema]
   Xiao Ming tiene un espacio abierto. Divide el espacio abierto en n filas y m columnas. La longitud de cada fila y cada columna es 1.
   Xiao Ming seleccionó algunas de las áreas pequeñas y plantó césped, mientras que las otras áreas pequeñas permanecieron abiertas.
   Estos pastos crecen muy rápido. Todos los meses, el césped crecerá hacia afuera. Si se planta un pequeño trozo de pasto, se expandirá a cuatro pequeños espacios arriba, abajo, izquierda y derecha, estos cuatro pequeños espacios Todo se convertirá en pequeños pedazos de hierba.
   Dígale a Xiao Ming dónde hay césped en campo abierto en k meses.
[Formato de entrada]
   La primera línea de entrada contiene dos números enteros n, m.
   En las siguientes n líneas, cada línea contiene m letras, lo que indica el estado inicial del espacio abierto, sin espacios entre las letras. Si es un punto decimal, significa que es un espacio abierto, si la letra es g, significa que hay césped plantado.
   Siguiente contiene un número entero k.
[Formato de salida]
   Salida n líneas, cada línea contiene m letras, lo que indica el estado del espacio abierto después de k meses. Si es un punto decimal, significa que es un espacio abierto, si la letra es g, significa que hay pasto.
[Entrada de muestra]
. 4. 5.
G ...
.....
.. G ..
.....
2
(composición tipográfica, agregó el espacio intermedio, ingrese manualmente el título de la entrada de muestra actual)

[Salida de muestra]
   gggg.    Gggg
   .
Ggggg
   .ggg.
[Escala y convenciones
   de casos de uso de medición ] Para el 30% de los casos de uso de medición, 2 <= n, m <= 20.
   Para el 70% de los casos de evaluación, 2 <= n, m <= 100.
   Para todos los casos de evaluación, 2 <= n, m <= 1000 y 1 <= k <= 1000.

Cometer errores

 Índice fuera de los límites

Solución

  Para evitar la excepción de índice fuera de límites, arr [n] [m] puede cambiarse a arr [n + 2] [m + 2] e inicializarse a '0'.

Dificultades

  Cómo asignar correctamente un valor de césped al espacio abierto circundante

Soluciones a grandes dificultades

  Primero marque el espacio abierto cerca del césped como '1', y luego cambie el '1' por 'g' después de todas las marcas. Una

explicación más detallada está en los comentarios del código

Código

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    //种草
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        char arr[][]=new char[n+2][m+2];//防止索引越界异常
        for(int i=0;i<n+2;i++){
    
    
            for(int j=0;j<m+2;j++){
    
    
                arr[i][j]='0'; //初始化为'0'
            }
        }
        String str[] = new String[n];
        for(int i=0;i<n;i++){
    
    
            str[i]=scanner.next(); //将值以字符串的形式输入
        }
        for(int i=1;i<n+1;i++){
    
    
            for(int j=1;j<m+1;j++){
    
    
                arr[i][j]=str[i-1].charAt(j-1);//将字符串中的值赋给数组
            }
        }
        int k = scanner.nextInt();
        for(int l=0;l<k;l++){
    
    
            for(int i=1;i<n+1;i++){
    
    
                for(int j=1;j<m+1;j++){
    
    
                    if(arr[i][j]=='g'){
    
    //将有草周边且非0的空地标为1
                        if(arr[i][j+1]!='0'&&arr[i][j+1]!='g'){
    
    
                            arr[i][j+1]='1';
                        }
                        if(arr[i][j-1]!='0'&&arr[i][j-1]!='g'){
    
    
                            arr[i][j-1]='1';
                        }
                        if(arr[i+1][j]!='0'&&arr[i+1][j]!='g'){
    
    
                            arr[i+1][j]='1';
                        }
                        if(arr[i-1][j]!='0'&&arr[i-1][j]!='g'){
    
    
                            arr[i-1][j]='1';
                        }
                    }
                }
            }
            for(int i=1;i<n+1;i++){
    
    //将空地变为有草地
                for(int j=1;j<m+1;j++){
    
    
                    if(arr[i][j]=='1'){
    
    
                        arr[i][j]='g';
                    }
                }
            }
        }

        for(int i=1;i<n+1;i++){
    
    //打印输出结果
            for(int j=1;j<m+1;j++){
    
    
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }

    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_47168235/article/details/108910428
Recomendado
Clasificación