In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
Expert Answer
public class findMaxProduct {
public static long findMaximumProduct(int grid[][]) {
long maxProduct = 0;
for(int r=0; r < grid.length; r++) {
for(int c=0; c < grid[r].length; c++) {
long product;
// Check for horizontal row of 4 elements starting from this
if(grid[r].length > c+3) {
product = grid[r][c] * grid[r][c+1] * grid[r][c+2] * grid[r][c+3];
if(product > maxProduct)
maxProduct = product;
}
// Check for vertical col of 4 elements starting from this
if(grid.length > r+3) {
product = grid[r][c] * grid[r+1][c] * grid[r+2][c] * grid[r+3][c];
if(product > maxProduct)
maxProduct = product;
}
// Check for diagonal from top left to bottom right starting from this
if(grid.length > r+3 && grid[r].length > c+3) {
product = grid[r][c] * grid[r+1][c+1] * grid[r+2][c+2] * grid[r+3][c+3];
if(product > maxProduct)
maxProduct = product;
}
// Check for diagonal from top left to bottom right starting from this
if(0 < (r-3) && (c-3) > 0) {
product = grid[r][c] * grid[r-1][c-1] * grid[r-2][c-2] * grid[r-3][c-3];
if(product > maxProduct)
maxProduct = product;
}
}
}
return maxProduct;
}
public static void main(String[] args) {
int grid[][] = new int[20][20];
Random r = new Random();
System.out.println(“Grid is: “);
for(int i=0; i<20; i++) {
for(int j=0; j<20; j++) {
grid[i][j] = r.nextInt(50);
System.out.print(grid[i][j] + ” “);
}
System.out.println();
}
System.out.println(“The maximum prodcut with required criteria in given grid is: ” + findMaximumProduct(grid));
}
}