我得到51267216作为输出,但答案应该是70600674。 如果有人能提出改进此代码的建议,我也将不胜感激。
// Program to find largest product in a 20x20 grid
public class LargestProductInAGrid
{
int a[][] = {{8, 2, 22, 97, 38 ,15 ,0 ,40, 0, 75, 4, 5, 7, 78, 52 ,12 ,50 ,77 ,91 ,8},
{49 ,49, 99, 40, 17, 81, 18 ,57, 60 ,87 ,17, 40, 98 ,43, 69, 48 ,4, 56 ,62, 0},
{81 ,49, 31, 73, 55 ,79, 14, 29, 93, 71, 40 ,67, 53, 88, 30, 3, 49, 13 ,36, 65},
{52 ,70 ,95 ,23 ,04 ,60 ,11 ,42 ,69 ,24 ,68, 56, 01 ,32 ,56 ,71 ,37 ,2 ,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, 5 ,66 ,73, 99 ,26 ,97, 17, 78 ,78 ,96 ,83 ,14, 88 ,34, 89 ,63 ,72},
{21 ,36 ,23, 9 ,75 ,0 ,76 ,44 ,20, 45 ,35 ,14 ,0 ,61 ,33, 97 ,34, 31 ,33 ,95},
{78, 17 ,53, 28, 22 ,75, 31 ,67, 15, 94 ,3 ,8 ,4 ,62 ,16 ,14 ,9, 53 ,56 ,92},
{16, 39 ,5, 42 ,96 ,35, 31 ,47 ,55, 58 ,88 ,24 ,0, 17 ,54 ,24 ,36 ,29, 85 ,57},
{86, 56 ,0, 48, 35 ,71, 89 ,7, 5, 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, 4, 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, 3, 46 ,33, 67 ,46 ,55 ,12 ,32, 63, 93 ,53 ,69},
{4 ,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 ,4, 36 ,16},
{20 ,73 ,35 ,29, 78, 31 ,90, 1 ,74 ,31, 49 ,71 ,48 ,86 ,81 ,16, 23, 57 ,5 ,54},
{1, 70 ,54, 71 ,83, 51 ,54, 69 ,16 ,92 ,33,48 ,61 ,43, 52 ,1 ,89 ,19 ,67 ,48}
};
long greatestProduct = 1;
void checkRows()
{
int product = 1;
for(int row = 0 ; row < 20;row++)
{
for(int col = 0 ; col < 20-3; col++)
{
product = a[row][col]*a[row][col+1]*a[row][col+2]*a[row][col+3];
if(product > greatestProduct)
{
greatestProduct = product;
}
}
}
}
void checkColumns()
{
int product = 1;
for(int col = 0 ; col < 20; col++)
{
for(int row = 0 ; row < 20-3; row++)
{
product = a[row][col]*a[row+1][col]*a[row+2][col]*a[row+3][col];
if(product > greatestProduct)
{
greatestProduct = product;
}
}
}
}
void checkUpperDiagonals()
{
int col =0;
int col1 = 0;
int lengthOfDiagonal = 20;
int n = 20;
int product,product1;
while(lengthOfDiagonal>3)
{
for(int row = 0; row <lengthOfDiagonal -3; row++)
{
product = a[row][col]*a[row+1][col+1]*a[row+2][col+2]*a[row+3][col+3];
product1 = a[row][n-col-1]*a[row+1][n-col-2]*a[row+2][n-col-3]*a[row+3][n-col-4];
if(product > greatestProduct)
{
greatestProduct = product;
}
if(product1 > greatestProduct)
{
greatestProduct = product1;
}
}
lengthOfDiagonal--;
col = ++col1;
}
}
void checkLowerDiagonals()
{
int row = 1;
int row1 = 1;
int lengthOfDiagonal = 19;
int n = 20;
int product,product1;
while(lengthOfDiagonal>3)
{
for(int col = 0; col <lengthOfDiagonal -3; col++)
{
product = a[row][col]*a[row+1][col+1]*a[row+2][col+2]*a[row+3][col+3];
product1 = a[row][n-col-1]*a[row+1][n-col-2]*a[row+2][n-col-3]*a[row+3][n-col-4];
if(product > greatestProduct)
{
greatestProduct = product;
}
if(product1 > greatestProduct)
{
greatestProduct = product1;
}
}
lengthOfDiagonal--;
row = ++row1;
}
}
void result()
{
System.out.println("Greatest Product = " +greatestProduct);
}
public static void main(String args[])
{
LargestProductInAGrid l = new LargestProductInAGrid();
l.checkRows();
l.checkColumns();
l.checkUpperDiagonals();
l.checkLowerDiagonals();
l.result();
}
}
答案 0 :(得分:1)
你的对角跳棋非常模糊。为什么?它们应该与行和列检查器非常相似。
示例,要检查5x5矩阵中的3个长度,请使用大写字母迭代单元格。 Ooo
就是一个例子:
Row: X X X x x Check two cells to the right
X X O o o
X X X x x
X X X x x
X X X x x
Column: X X X X X Check two cells down
X X X X X
X O X X X
x O x x x
x O x x x
Diagonal Up: x x x o x Check two cells up-right
x x o x x
X O X x x
X X X x x
X X X x x
Diagonal Down: X X X x x Check two cells down-right
X X X x x
X O X x x
x x o x x
x x x o x
正如您所看到的,它们都非常相似,并且都需要带有两个for
循环的简单代码。
如果您需要调试您的代码,那么您要查找的4个数字为87 97 94 89
,并且处于对角线向上模式。