• 百度--最大和


    在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向的直线连续D个数字的和里面最大的值 

    输入描述:

    每个测试输入包含1个测试用例,第一行包括两个整数 N 和 D :
    3 <= N <= 100
    1 <= D <= N
    接下来有N行,每行N个数字d:
    0 <= d <= 100

    输出描述:

    输出一个整数,表示找到的和的最大值

    输入例子:

    4 2
    87 98 79 61
    10 27 95 70
    20 64 73 29
    71 65 15 0

    输出例子:

    193

    基本思路:分四种情况获取所求和:

    1、从左到右,按行去遍历数组

    2、从上到下,按列遍历数组

    3、从左上到右下遍历数组

    4、从左下到右上遍历数组

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,d;
        cin>>n>>d;
        int** p = new int*[n];
        int max_sum=0;
        for (int i = 0; i <n; ++i)
        {
            p[i] = new int[n];
        }
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                cin >> p[i][j];
            }
        }
    
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n-d+1;j++)
            {
                int sum=0;
                for(int k=j;k<j+d;k++)
                {
                    sum+=p[i][k];
                }
                    if(max_sum<sum)
                    max_sum=sum;
            }
        }
        
        for(int j=0;j<n;j++)
        {
            for(int i=0;i<n-d+1;i++)
            {
                int sum=0;
                for(int k=i;k<i+d;k++)
                {
                    sum+=p[k][j];
                }
                if(max_sum<sum)
                    max_sum=sum;
            }
        }
       
        for(int i=0;i<n-d+1;i++)
        {
            for(int j=0;j<n-d+1;j++)
            {
                int sum=0;
                int q=j;
                for(int k=i;k<d+i;k++)
                {
                    sum+=p[k][q];
                    q++;
                }
    
                    if(max_sum<sum)
                    max_sum=sum;
            }
        }
       
        for(int i=n-1;i>=d-1;i--)
        {
            for(int j=0;j<n-d+1;j++)
            {
                int sum=0;
                int q=j;
                for(int k=i;k>=i-d+1;k--)
                {
    
                    sum+=p[k][q];
                    q++;
                }
    
                    if(max_sum<sum)
                    max_sum=sum;
            }
        }
        cout<<max_sum<<endl;
    /*
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
                cout<<p[i][j]<<" ";
            cout<<endl;
        }
    */
        return 0;
    }
  • 相关阅读:
    VUE-cli使用
    2017/04/09王晨分享课大纲
    CommonJS模块和ES6模块的区别
    css常见布局方式
    从输入 URL 到页面加载完成的过程中都发生了什么
    函数节流与防抖的实现
    JavaScript表单
    jQuery方法实现
    移动端去除横向滚动条
    请假时碰到法定假期,实际请假几天?
  • 原文地址:https://www.cnblogs.com/omelet/p/6822049.html
Copyright © 2020-2023  润新知