• Project Euler Problem 11: Largest product in a grid


    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




  • 相关阅读:
    仿google的suggest
    renderjs主动发起通讯
    数据库设计原则(转载)
    SqlBulkCopy批量插入
    NPOI使用word模板
    visual studio 2010与NUNIT集成调试
    bond
    linux 内核参数优化
    Linux清除用户登陆及历史命令
    nginx 常用请求
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564028.html
Copyright © 2020-2023  润新知