Largest product in a grid
Problem 11
In the 2020 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 the same direction (up, down, left, right, or diagonally) in the 2020 grid?
乘积最大的路径
问题 11
在以下2020的网格中, 沿对角线的四个数已被标记为红色.
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
这四个数的乘积为 26 63
78
14 = 1788696.
那么在这个2020的栅格中,沿同一方向的四个相邻的数相乘获得的最大的数为多少 (向上, 向下, 向左, 向右, 沿对角线)?
public class Euler11
{
public static void main(String[] args)
{
int[][] arr=new int[20][];
arr[0]=new int[]{8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8};
arr[1]=new int[]{49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0};
arr[2]=new int[]{81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65};
arr[3]=new int[]{52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91};
arr[4]=new int[]{22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80};
arr[5]=new int[]{24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50};
arr[6]=new int[]{32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70};
arr[7]=new int[]{67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21};
arr[8]=new int[]{24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72};
arr[9]=new int[]{21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95};
arr[10]=new int[]{78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92};
arr[11]=new int[]{16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57};
arr[12]=new int[]{86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58};
arr[13]=new int[]{19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40};
arr[14]=new int[]{4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66};
arr[15]=new int[]{88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69};
arr[16]=new int[]{4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36};
arr[17]=new int[]{20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16};
arr[18]=new int[]{20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54};
arr[19]=new int[]{1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48};
int up=0,upTemp=0;
for(int i=0;i<17;i++)
for(int j=0;j<20;j++)
{
upTemp=arr[i][j]*arr[i+1][j]*arr[i+2][j]*arr[i+3][j];
up=up>upTemp? up:upTemp;
}
System.out.println("up=down"+up);
int left=0,leftTemp=0;
for(int i=0;i<20;i++)
for(int j=0;j<17;j++)
{
leftTemp=arr[i][j]*arr[i][j+1]*arr[i][j+2]*arr[i][j+3];
left=left>leftTemp? left:leftTemp;
}
System.out.println("left=right="+left);
int diA=0,diATemp=0;
for(int i=0;i<17;i++)
for(int j=0;j<17;j++)
{
diATemp=arr[i][j]*arr[i+1][j+1]*arr[i+2][j+2]*arr[i+3][j+3];
diA=diA>diATemp? diA:diATemp;
}
System.out.println("diA="+diA);
int diB=0,diBTemp=0;
for(int i=4;i<20;i++)
for(int j=0;j<17;j++)
{
diBTemp=arr[i][j]*arr[i-1][j+1]*arr[i-2][j+2]*arr[i-3][j+3];
diB=diB>diBTemp? diB:diBTemp;
}
System.out.println("diB="+diB);
int max=0;
max=up>left? up:left;
max=max>diA? max:diA;
max=max>diB? max:diB;
System.out.println("max="+max);
}
}
转载于:https://blog.51cto.com/qianke/1391641