• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
煎蛋啊
博客园    首页    新随笔    联系   管理    订阅  订阅
百度--最大和

在一个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;
}
posted on 2017-05-07 20:05  煎蛋啊  阅读(285)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3