0

问题陈述

给您一个多层机架,其形式为 m 行 n 列矩阵。每个细胞都被红色药丸(用 r 标记)、蓝色药丸(用 b 标记)或细菌(用 x 标记)占据。红色药丸可以杀死水平、垂直和对角方向的相邻细菌(如果有),而蓝色药丸只能杀死水平和垂直方向的相邻细菌(如果有)。最初这些药片是无效的。一旦活跃,它们就可以作用于相邻的细菌。一旦药丸被激活,您需要找到机架中剩余细菌的数量。

m = 行 n = 列 , test = 迭代次数

r = 红色药丸,
x = 细菌

条件是:

r = 红色药丸可以在水平、垂直和对角线方向杀死相邻的细菌。

我需要找到剩余的细菌。

我的(不完整)解决方案是 - 我创建了一个接受字符串的二维数组(arr1),然后将该数组元素转换为整数,即 0 和 1(r = 0 和 x = 1)并存储在另一个二维数组(arr2)中。现在我只能计算细菌总数,但我想找到剩余的细菌。

这是我的代码

    import java.util.Scanner; 
    import java.*;

   public class Pills  {
   public static void main(String args[])
  {
  // initialize here. 
   int row, col, i, j, k, test;  
  String  arr[][] = new String[10][10];
  int arr2[][] = new int[10][10];
 Scanner scan = new Scanner(System.in);
 System.out.println("Enter number of tests :");

 test = scan.nextInt();
 for(k=0;k<test;k++)
 {
  //enter row and column for array.
   System.out.println(" ");
   row = scan.nextInt(); 
   System.out.println(" "); 
   col = scan.nextInt(); 

   // enter array elements.
   System.out.println(" "); 
   for(i=0; i<row; i++)
    { 
    for(j=0; j<col; j++)
     {
      arr[i][j] = scan.next(); 
      if(arr[i][j].equals("r"))
      {
          arr2[i][j]=0;
      }
      else {
         arr2[i][j]=1;
              }
            }
         }    
        // the 2D array is here.
        System.out.print("\n"); 
        for(i=0; i<row; i++)        
       { 
        for(j=0; j<col; j++)   
         {
           System.out.print(arr[i][j]+ " ");
           }
           System.out.println();
           }
           System.out.print("\n"); 

            int sum = 0;
            for ( i=0; i < arr2.length; i++)
           {
            for (j=0; j < arr2[i].length; j++)
            {
            sum = sum + arr2[i][j];
             }
              }
              System.out.println("Total Germs : "+sum);    
                  }
                } 
              }

我需要帮助寻找剩余的细菌。

4

1 回答 1

-2
public class Main
{
  public static void main (String[]args)
  {

    String[][]arr =
    {
      {
      "g", "g", "g", "g"},
      {
      "g", "r", "g", "g"},
      {
      "g", "g", "g", "g"},
      {
      "g", "g", "g", "g"}
    };

    int germCount = getGerms (arr);
    System.out.print (germCount);

  }

  public static int getGerms (String[][]arr)
  {
    int germCount = 0;
    int row = arr.length;
    int col = arr[0].length;

    for (int i = 0; i < row; i++)
      {
    for (int j = 0; j < col; j++)
      {
        if (arr[i][j].equals ("r") || arr[i][j].equals ("b"))
          {
        if (i + 1 < row && arr[i + 1][j].equals ("g"))
          {
            arr[i + 1][j] = "k";

          }
        if (i - 1 >= 0 && arr[i - 1][j].equals ("g"))
          {
            arr[i - 1][j] = "k";

          }
        if (j + 1 < col && arr[i][j + 1].equals ("g"))
          {
            arr[i][j + 1] = "k";

          }
        if (j - 1 >= 0 && arr[i][j - 1].equals ("g"))
          {
            arr[i][j - 1] = "k";

          }
          }


        if (arr[i][j].equals ("r"))
          {
        if (i + 1 < row && j + 1 < col
            && arr[i + 1][j + 1].equals ("g"))
          {
            arr[i + 1][j + 1] = "k";

          }
        if (i + 1 < row && j - 1 >= 0
            && arr[i + 1][j - 1].equals ("g"))
          {
            arr[i + 1][j - 1] = "k";

          }

        if (i - 1 >= 0 && j - 1 >= 0
            && arr[i - 1][j - 1].equals ("g"))
          {
            arr[i - 1][j - 1] = "k";

          }


        if (i - 1 >= 0 && j + 1 < col
            && arr[i - 1][j + 1].equals ("g"))
          {
            arr[i - 1][j + 1] = "k";

          }
          }

      }
      }

    for (int i = 0; i < row; i++)
      {
    for (int j = 0; j < col; j++)
      {
        System.out.print (arr[i][j]);
        if (arr[i][j].equals ("g"))
          germCount++;
      }
    System.out.println ();
      }

    return germCount;
  }
}

o/p-

kkkg
krkg
kkkg
gggg
7
于 2019-11-13T10:30:38.153 回答