• 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




  • 相关阅读:
    c#获取指定时区的日期
    项目版本管理
    iis部署网站
    浏览器测试string是否为图片
    网站中挂视频
    百度地图调用
    mvc actionresult返回各种文件
    Coursera机器学习week7 单元测试
    Coursera机器学习week7 笔记
    牛客练习赛12 AB
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564028.html
Copyright © 2020-2023  润新知