您的位置:首页 > 其它

project euler problem 11:Largest product in a grid

2013-10-01 12:21 447 查看


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?

思路:刚开始在想怎么把这个放入二维数组呢,想了好久。如果真的要开个二维数组,而且又把它们放进去的话,这有点麻烦,就无意中看到魏神的解法,所以真是糊涂一时,编程序的时候输入不就是个好办法么……唉,真是的,刚开始还让我想那么多!!!

#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
using namespace std;
int a[21][21];
int main()
{
    int sum,i,j;
    for(i=0;i<20;i++)
        for(j=0;j<20;j++)
            cin>>a[i][j];
    for(i=0;i<20;i++)
        for(j=0;j<20;j++)
        {
            if(j<=16) sum=max(sum,a[i][j]*a[i][j+1]*a[i][j+2]*a[i][j+3]);
            if(i<=16) sum=max(sum,a[i][j]*a[i+1][j]*a[i+2][j]*a[i+3][j]);
            if(i<=16&&j<=16) sum=max(sum,a[i][j]*a[i+1][j+1]*a[i+2][j+2]*a[i+3][j+3]);
            if(i<=16&&j>=3) sum=max(sum,a[i][j]*a[i+1][j-1]*a[i+2][j-2]*a[i+3][j-3]);
        }
    cout<<sum<<endl;
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: