In the 20
20
grid below, four numbers along a diagonal line have been marked in red.
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
The product of these numbers is 26
63
78
14
= 1788696.
What is the greatest product of four adjacent numbers in any direction (up, down, left, right, or diagonally) in the 20
20
grid?
public class GridProduct {
public static void main(String args[]){
int [][] a={
{8,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,8},
{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,8,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,9,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,9,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,8,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,8,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},
};
int mul1=1,mul2=1,mul3=1,mul4=1;
//down
for(int i=0;i<20;i++){
for(int j=0;j<17;j++){
int pro1=a[i][j]*a[i][j+1]*a[i][j+2]*a[i][j+3];
if(mul1<pro1){
mul1=pro1;
}
}
}
//left
for(int i=0;i<17;i++){
for(int j=0;j<20;j++){
int pro2=a[i][j]*a[i+1][j]*a[i+2][j]*a[i+3][j];
if(mul2<pro2){
mul2=pro2;
}
}
}
//diagonally right
for(int i=0;i<17;i++){
for(int j=0;j<17;j++){
int pro3=a[i][j]*a[i+1][j+1]*a[i+2][j+2]*a[i+3][j+3];
if(mul3<pro3){
mul3=pro3;
}
}
}
//diagonally left
for(int i=19;i>=3;i--){
for(int j=0;j<17;j++){
int pro4=a[i][j]*a[i-1][j+1]*a[i-2][j+2]*a[i-3][j+3];
if(mul4<pro4){
mul4=pro4;
}
}
}
System.out.println("mul1="+mul1+",mul2="+mul2+",mul3="+mul3+",mul4="+mul4);
}
}
|
Answer:
| 70600674 |
import java.util.HashMap;
public class Recss {
static HashMap<Integer, String> horHashmap=new HashMap<Integer, String>();
public static int horizental(int [][] array){
int result=0;
for(int m=0;m<20;m++){
for(int n=0;n<17;n++){
int temp=array[m][n]*array[m][n+1]*array[m][n+2]*array[m][n+3];
if(temp>result){
horHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m][n+1])+","+String.valueOf(array[m][n+2])+","+String.valueOf(array[m][n+3]));
result=temp;
}
}
}
return result;
}
static HashMap<Integer, String> verHashmap=new HashMap<Integer, String>();
public static int vertal(int [][] array){
int result=0;
for(int m=0;m<17;m++){
for(int n=0;n<20;n++){
int temp=array[m][n]*array[m+1][n]*array[m+2][n]*array[m+3][n];
if(temp>result){
verHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m+1][n])+","+String.valueOf(array[m+2][n])+","+String.valueOf(array[m+3][n]));
result=temp;
}
}
}
return result;
}
static HashMap<Integer, String> xieHashmap=new HashMap<Integer, String>();
public static int xie(int [][] array){
int result=0;
for(int m=0;m<17;m++){
for(int n=0;n<17;n++){
int temp=array[m][n]*array[m+1][n+1]*array[m+2][n+2]*array[m+3][n+3];
if(temp>result){
xieHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m+1][n+2])+","+String.valueOf(array[m+2][n+3])+","+String.valueOf(array[m+3][n+4]));
result=temp;
}
}
}
return result;
}
static HashMap<Integer, String> fanxiangHashmap=new HashMap<Integer, String>();
public static int fanxiang(int [][] array){
int result=0;
for(int m=19;m>2;m--){
for(int n=0;n<17;n++){
int temp=array[m][n]*array[m-1][n+1]*array[m-2][n+2]*array[m-3][n+3];
if(temp>result){
fanxiangHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m-1][n+1])+","+String.valueOf(array[m-2][n+2])+","+String.valueOf(array[m-3][n+3]));
result=temp;
}
}
}
return result;
}
public static void main(String[] args) {
int [][] array={{8,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,8},
{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,8,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,9,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,9,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,8,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,8,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}};
Recss rec=new Recss();
System.out.println(horizental(array));
System.out.println(horHashmap.get(horizental(array)));
System.out.println(vertal(array));
System.out.println(verHashmap.get(vertal(array)));
System.out.println(xie(array));
System.out.println(xieHashmap.get(xie(array)));
System.out.println(fanxiang(array));
System.out.println(fanxiangHashmap.get(fanxiang(array)));
}
}
本文探讨了一个20x20数字网格中四个相邻数的最大乘积问题,这些数可以沿任何方向(水平、垂直或对角线)排列。通过编程方法解决了这一挑战,并给出了最大乘积的具体数值。
5670

被折叠的 条评论
为什么被折叠?



