您的位置:首页 > 其它

Project Euler Problem 11: Largest product in a grid

2017-03-20 20:39 513 查看
Largest product in a grid

Problem 11

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 the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

C++(Faster):

#include <iostream>

using namespace std;

const int MAXN = 20;
const int TWO = 2;
const int FOUR = 4;

int grid[MAXN][MAXN];
int product2[MAXN][MAXN];

int main()
{
int maxproduct = 0, temp;

for(int i=0; i<MAXN; i++)
for(int j=0; j<MAXN; j++)
cin >> grid[i][j];

for(int i=0; i<MAXN-TWO; i++)
for(int j=0; j<MAXN-TWO; j++)
product2[i][j] = grid[i][j] * grid[i+1][j+1];
for(int i=0; i<MAXN-FOUR; i++)
for(int j=0; j<MAXN-FOUR; j++) {
temp = product2[i][j] * product2[i+2][j+2];
if(temp > maxproduct)
maxproduct = temp;
}

for(int i=0; i<MAXN-TWO; i++)
for(int j=0; j<MAXN-TWO; j++)
product2[i][j] = grid[i][j+3] * grid[i+1][j+2];
for(int i=0; i<MAXN-FOUR; i++)
for(int j=0; j<MAXN-FOUR; j++) {
temp = product2[i][j+3] * product2[i+2][j+1];
if(temp > maxproduct)
maxproduct = temp;
}

for(int i=0; i<MAXN; i++)
for(int j=0; j<MAXN-TWO; j++)
product2[i][j] = grid[i][j] * grid[i][j+1];
for(int i=0; i<MAXN; i++)
for(int j=0; j<MAXN-FOUR; j++) {
temp = product2[i][j] * product2[i][j+2];
if(temp > maxproduct)
maxproduct = temp;
}

for(int i=0; i<MAXN; i++)
for(int j=0; j<MAXN-TWO; j++)
product2[j][i] = grid[j][i] * grid[j][i+1];
for(int i=0; i<MAXN; i++)
for(int j=0; j<MAXN-FOUR; j++) {
temp = product2[j][i] * product2[j][i+2];
if(temp > maxproduct)
maxproduct = temp;
}

cout << maxproduct << endl;

return 0;
}

C++:

#include <iostream>

using namespace std;

const int MAXN = 20;
const int FOUR = 4;

int grid[MAXN][MAXN];

int main()
{
int maxproduct = 0, temp;

for(int i=0; i<MAXN; i++)
for(int j=0; j<MAXN; j++)
cin >> grid[i][j];

for(int i=0; i<MAXN-FOUR; i++)
for(int j=0; j<MAXN-FOUR; j++) {
temp = grid[i][j] * grid[i+1][j+1] * grid[i+2][j+2] * grid[i+3][j+3];
if(temp > maxproduct)
maxproduct = temp;

temp = grid[i][j+3] * grid[i+1][j+2] * grid[i+2][j+1] * grid[i+3][j];
if(temp > maxproduct)
maxproduct = temp;
}

for(int i=0; i<MAXN; i++)
for(int j=0; j<MAXN-FOUR; j++) {
temp = grid[i][j] * grid[i][j+1] * grid[i][j+2] * grid[i][j+3];
if(temp > maxproduct)
maxproduct = temp;

temp = grid[j][i] * grid[j][i+1] * grid[j][i+2] * grid[j][i+3];
if(temp > maxproduct)
maxproduct = temp;
}

cout << maxproduct << endl;

return 0;
}


Input data:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: