I'm stuck with this problem. I do think I've got the right solution but when submitting it to the website, it does not accept it.
I tried debugging it by printing all the possible combinations and they're all done (horizontally, vertically and diagonally). The array is filled correctly also. I checked it by printing it after.
Do you know where the problem may be?
What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
Project Euler
String product =
"08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 "
+ "49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 "
+ "81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 "
+ "52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 "
+ "22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 "
+ "24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 "
+ "32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 "
+ "67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 "
+ "24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 "
+ "21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 "
+ "78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 "
+ "16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 "
+ "86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 "
+ "19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 "
+ "04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 "
+ "88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 "
+ "04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 "
+ "20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 "
+ "20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 "
+ "01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 ";
Scanner sc = new Scanner(product);
int[][] in = new int[20][20];
for (int i = 0 ; i < 20 ; i++){
for (int j = 0 ; j < 20 ; j++){
in[i][j] = sc.nextInt();
}
}
int max = Integer.MIN_VALUE;
int tmp = 0;
for (int i = 0 ; i < 20 ; i++){
for (int j = 0 ; j < 20 ; j++){
if (i < 17){
tmp = in[i][j] * in[i+1][j] * in[i+2][j] * in[i+3][j];
if (tmp > max) max = tmp;
}
if (j < 17){
tmp = in[i][j] * in[i][j+1] * in[i][j+2] * in[i][j+3];
if (tmp > max) max = tmp;
}
if (j < 17 && i < 17){
tmp = in[i][j] * in[i+1][j+1] * in[i+2][j+2] * in[i+3][j+3];
if (tmp > max) max = tmp;
}
}
}
System.out.println(max);
51267216
You are only checking one diagonal, you need to check the other one as well:
if(j > 2 && i < 17) {
tmp = in[i][j] * in[i+1][j-1] * in[i+2][j-2] * in[i+3][j-3];
if (tmp > max) max = tmp;
}
You only check one diagonal, namely the one that goes in the down-right direction.
Going up-right:
if (i < 17 && j > 2){
tmp = in[i][j] * in[i+1][j-1] * in[i+2][j-2] * in[i+3][j-3];
if (tmp > max) max = tmp;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With