How to find max product of 4 adjacent numbers in the same direction in a 8×8 grid with Java

1 Answer

0 votes
import java.util.Random;
   
public class MyClass {
       
    public static void printGrid(int[][] grid, int size) {
        for (int i = 0; i < size; i++) {  
            for (int j = 0; j < size; j++) {
                System.out.printf("%4d", grid[i][j]);
            } 
            System.out.println();
        }
    }
   
    public static int generateRandomInteger(int min, int max) {
        return new Random().nextInt(max - min + 1) + min;
    }
       
    private static int[][] generateRandomInteger(int size) {
        int[][] grid = new int[size][size];
       
        for (int i = 0; i < size; i++) {     
            for (int j = 0; j < size; j++) {
                grid[i][j] = generateRandomInteger(1, 100);
            }
        }
       
        return grid;
    }
      
    static int FindMaxProduct(int grid[][], int size) {
        int max = 0, product;
        int n1 = 0, n2 = 0, n3 = 0, n4 = 0;
          
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size - 3; j++) {
                product = grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3];
                if (product > max) {
                    n1 = grid[i][j]; n2 = grid[i][j + 1]; n3 = grid[i][j + 2]; n4 = grid[i][j + 3];
                    max = product;
                }
            }
        }
                     
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size - 3; j++) {
                product = grid[j][i] * grid[j + 1][i] * grid[j + 2][i] * grid[j + 3][i];
                if (product > max) {
                    n1 = grid[i][j]; n2 = grid[j + 1][i]; n3 = grid[j + 2][i]; n4 = grid[j + 2][i];
                    max = product;
                }
            }
        }
             
        for (int i = 0; i < size - 3; i++) {
            for (int j = 0; j < size - 3; j++) {
                product = grid[j][i] * grid[j + 1][i + 1] * grid[j + 2][i + 2] * grid[j + 3][i + 3];
                if (product > max) {
                    n1 = grid[j][i]; n2 = grid[j + 1][i + 1]; n3 = grid[j + 2][i + 2]; n4 = grid[j + 3][i + 3];
                    max = product;
                }
            }
        }
             
        for (int i = 0; i < size - 3; i++) {
            for (int j = 3; j < size; j++) {
                product = grid[j][i] * grid[j - 1][i + 1] * grid[j - 2][i + 2] * grid[j - 3][i + 3];
                if (product > max) {
                    n1 = grid[j][i]; n2 = grid[j - 1][i + 1]; n3 = grid[j - 2][i + 2]; n4 = grid[j - 3][i + 3];
                    max = product;
                }
            }
        }
                      
        System.out.print("\n" + n1 + " * " + n2 + " * " + n3 + " * " + n4 + " = ");
   
        return max;
    }
      
    
    public static void main(String args[]) {
        int[][] grid = generateRandomInteger(8);
         
        printGrid(grid, 8);
          
        System.out.print(FindMaxProduct(grid, 8));
    }
}
   
   
   
   
/*
run:
   
  
  99  73  28  83  53  67  66   1
  10  79  24  14  36  26  21  95
  53   2  54  68  87  99  26   5
  62  63   3  52  71  50  76  87
  22  94  16  53   5   2  62  76
  15  15 100  61  73   3  88  23
  94   8  77  51  47  75  76  41
  75  81  47   7  56  17   2  45
  
100 * 53 * 71 * 99 = 37253700
   
*/

 



answered Nov 1, 2023 by avibootz
edited Nov 1, 2023 by avibootz
...