How to find max product of 4 adjacent numbers in the same direction in a 20×20 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(20);
         
        printGrid(grid, 20);
          
        System.out.print(FindMaxProduct(grid, 20));
    }
}
   
   
   
   
/*
run:
   
  16  15  13  53  52 100  28  46  51  90  33  60  97   9  92  74  30   1  93  75
  61  16  29   9  44  29   8  34  45  62  98   9  12  53  11  58  60  85  31  24
  54  14  29  43  65  35  15   8  47  47  88   7  93  66  88  99  97  92  51  97
  82  39  65  77  52  16  11  88  60  50  22  31  15  13  31  74  54  91  36  21
  46  86  77  36  13  29  78  30   6  80  97  67  54  60  40  98  34  61  74  33
  18  88  83  39  15   9  56   8  34  25  22  33  10  95  95  95  62  84   9  92
  65  98  43  48   4  15  87  13  41  32  22  67  91  62   2  46  27  71  46  75
  69  51  76  47  79  52  75  55  50  26  85  21  78   7  55  93   4  86   7  91
  63  56  91  56  74  52  24  37  71  90  79  88  67  82  99  54  70  93  48  91
  73  86  99  84  91  37  49   4  26  59  83  34  39  19  78  97  13  18  67  66
  54   6   8  84  51  69  55  54  87  40   5  96  76  94  37  27   7  50  69   9
  60  41  12  82  74  45  48  68  73   3  42  63  41  44  99  17  25  31  89  71
  67  77  20  79  78  32  79  15  32  14  12  82 100  94  73  98  40  49  73   1
  39  93  94  37  40   1  32  92  89  74  81  11  33  58  39  99  56  79  10  42
   2  55  70  82   8  10  25  31  92  21  42  45  69  49  95  12  83  41  81  87
   9  30  90  71   7  80  76   9  53  88  89  65  78  75  15  88  41  69  59   3
  32  33   8  49   8  56  33  26  33  15  74  33  80  23  14   8  40  69  55  36
  34  48  20   5   2  30  28   6  82   3  41  40  22  83  25  77  34  13  11  14
  29  12  31  59  74  22  60  41  94  94  19  65  15  81  93  48  16  42  88  94
  75  78  27  32   2  37  66  53  27  14  55  22  82  32  70  72   7  68  98  45

88 * 99 * 97 * 92 = 77745888
   
*/

 



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