project euler problem 11:Largest product in a grid

来源:互联网 发布:邪恶漫画知子继母 编辑:程序博客网 时间:2024/04/27 23:24

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;}

原创粉丝点击