网易编程:寻找所有横,竖,左上到右下,右上到左下,四种方向的所有和

原创 2017年03月06日 12:59:51
[编程题] 最大和
在一个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
代码虽然冗余,但是思路很清晰,四个大for循环,每个for循环求一个方向的所有和,这题想不到啥秒法,只有暴力循环啦><???
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int a[100][100];


bool isInmatrix(int n,int i,int j)
{
    return i>=0&&i<n&&j>=0&&j<n;
}

int main()
{
    int N,D;
    cin>>N>>D;
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            cin>>a[i][j];
        }
    }

    vector<int> vec;

    for (int i = 0; i < N; ++i)
    {
        for (int start = 0; start <= N-D; ++start)
        {
            int sum=0;
            for (int k = 0; k < D; ++k)
            {
                sum+=a[i][start+k];
            }
            vec.push_back(sum);
        }
    }

    for (int i = 0; i < N; ++i)
    {
        for (int start = 0; start <= N-D; ++start)
        {
            int sum=0;
            for (int k = 0; k < D; ++k)
            {
                sum+=a[start+k][i];
            }
            vec.push_back(sum);
        }
    }

    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            int sum=0;
            if(isInmatrix(N,i+D-1,j+D-1))
            {
                 for (int k = 0; k < D; ++k)
                {
                     sum+=a[i+k][j+k];
                }
                vec.push_back(sum);
            }     
        }
    }

   for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            int sum=0;
            if(isInmatrix(N,i+D-1,j-D+1))
            {
                 for (int k = 0; k < D; ++k)
                {
                     sum+=a[i+k][j-k];
                }
                vec.push_back(sum);
            }     
        }
    }

    sort(vec.begin(),vec.end());

    cout<<vec[vec.size()-1]<<endl;

    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

[编程题]在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向比较

在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向的直线连续D个数字的和里面最大的值输入描述: 每个测试输入包含1个测试用例,第一行包括两个整数 N 和 D : 3 ...

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

在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向的直线连续D个数字的和里面最大的值 输入描述:  每个测试输入包含1个测试用例,第一行包括两个整数 N 和 D :  3 ...

android右上、右下、左上、左下手势滑动判断

在进行android开发过程中,我们有时会遇到一个界面需要手势的情况。但是看网上大多写上下左右的手势判断,就感觉很死板。非得要用户直上直下,平左右的滑动,不能有一点偏差,不然手势就不精确了。所以也就自...
  • Osborn_
  • Osborn_
  • 2017年09月20日 18:12
  • 87

笔试算法题解析--二维数组右上到左下打印

这几天考了一些公司的笔试,现凭着一些记忆,对有关算法实现题做解析并实现。 1.二维数组,从右上到左下进行打印输出,如: 1  2  3 4  5  6  7 8 9 10 11 12  13...

css控制固定在左下,右下,左上角的漂浮层

主题:使用CSS控制一个固定在左下,右下,左上角的漂浮层 其他说明: 此 Demo 未作浏览器兼容性测试(兼容在IE7,IE8,firefox,safari,opera,google chrom...

百练noi21:二维数组右上左下遍历,24:蛇形填充数组

21:二维数组右上左下遍历 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个row行col列的整数数组array,要...

【动态规划】求二维数组从左下到右上的最优路径

1.求二维数组从左下到右上的最优路径,使得路径和最大,并且只能向上或向下走。 解析:求最短路径,路径和最优等都可以用动态规划做。 dp[i][j]表示到i,j坐标的最优路径。 第一,确定初始条件...

网易2017春招实习生笔试编程题集合(C++方向)

挺早之前做好一直想写一篇博客分享一下,但是后来给忘了…C++方向一共十二道编程题,可能和别的方向有一些出入。题目总体的难度不大,有些题有些小坑,适合进阶者练练手。 代码都扔在Github了 -> ...
  • cqk0100
  • cqk0100
  • 2017年06月17日 10:35
  • 543

[土狗之路]coursera C语言进阶习题 二维数组右上左下遍历

编程题#2: 二维数组右上左下遍历 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。) 注意: 总时间限制: 1000ms 内存限制: 65536...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网易编程:寻找所有横,竖,左上到右下,右上到左下,四种方向的所有和
举报原因:
原因补充:

(最多只允许输入30个字)