ブルーブリッジカップ:ロンググラス(詳細分析)

トピック

【問題点】
   シャオミンには空きスペースがあり、その空きスペースをn行m列に分割しています。各行と各列の長さは1です。
   Xiao Mingはいくつかの小さな区画を選択し、草を植えましたが、他の区画は開いたままでした。
   これらの草は非常に速く成長します。毎月、草は外側に成長します。小さな草を植えると、上下左右の4つの小さなスペースに拡大します。これらの4つの小さなスペースすべてが草で小片になります。
   オープングラウンドの草がkヶ月でどこにあるかをシャオミンに教えてください。
【入力形式】入力
   の1行目に2つの整数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です。

間違いを犯す

 範囲外のインデックス

解決

  インデックスの範囲外の例外を防ぐために、arr [n] [m]をarr [n + 2] [m + 2]に変更し、「0」に初期化することができます。

難しさ

  周囲の広場に草の価値を正しく割り当てる方法

大きな問題の解決策

  最初に芝生の近くのオープンスペースを「1」としてマークし次にすべてのマーク後に「1」を「g」変更します。

より詳細な説明はコードコメントにあります。

コード

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();
        }

    }
}

おすすめ

転載: blog.csdn.net/qq_47168235/article/details/108910428