问题
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?
Question
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
Code
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);
Output
51267216
回答1:
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;
}
回答2:
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;
}
来源:https://stackoverflow.com/questions/33461805/largest-product-in-a-grid