在2d数组中找到给定索引的对角元素之和

时间:2015-03-20 18:59:49

标签: c++ arrays

我必须构造一个具有N,M行和列(N&amp; M <= 5)的二维数组,然后用户输入一个像2,3一样的索引(位置)(矩阵[2] [3] )假设这两个数字在矩阵的边界内。从那时起,我必须找到通过数字的左右对角线的总和,但是数字从总和中排除。

所以例如2d数组是myArray [3] [3]

*1* 15 *2*
2 *71* 8
*5* 22 *5*

所以用户输入1,1是myArray [1] [1],在这种情况下是数字71,总和将是1 + 5 + 2 + 5 ...而且我的问题是我怎么能找到那些没有走出界限的对角线。

For the left top i would go:
row--
column--
while(row >= 0|| column >= 0)

For left bottom:
row++
colum++
while(row < N || column < M)

for right top:
row--
column++
while(row >= 0 || column < M)

for right bottom:
row++
column--
while(row < N || column >=0)

(这是糟糕的伪代码,对不起)

当我输入不在顶行或底行的数字时,它工作正常,但在它们位于那里的情况下我的程序停止。

1 个答案:

答案 0 :(得分:1)

你拥有的基本上是好的伪代码。我的第一个想法是,在确定位置是否超出范围时,你应该使用&amp;&amp;而不是||。

如果他们提供错误的位置,您还需要某种方式提前退出。下面是我快速编写的一些代码,似乎可以快速浏览一下 - 我遍历每个可能的起始位置,包括那些超出范围的位置。

#include <iostream>

const int N = 3;
const int M = 4;
int matrix[N][M] = {
        { 0, 1, 2, 3 },
        { 4, 5, 6, 7 },
        { 8, 9, 10, 11 }
};

int directional_sum(int row, int column, int row_inc, int column_inc)
{
    int sum = 0;

    if (row < 0 || column < 0 || row >= N || column >= M)
        return sum;

    int temp_row = row + row_inc;
    int temp_column = column + column_inc;
    while (temp_row >= 0 && temp_column >= 0 && temp_row < N && temp_column < M)
    {
        sum += matrix[temp_row][temp_column];

        temp_row += row_inc;
        temp_column += column_inc;
    }

    return sum;
}

int diagonal_sum(int row, int column)
{
    int sum = 0;
    sum += directional_sum(row, column,  1,  1);
    sum += directional_sum(row, column,  1, -1);
    sum += directional_sum(row, column, -1,  1);
    sum += directional_sum(row, column, -1, -1);

    return sum;
}

int main()
{
    for (int i = -1; i <= N; i++)
    {
        for (int j = -1; j <= M; j++)
        {
            std::cout << "Sum for [" << i << ", " << j << "]: " << diagonal_sum(i, j) << std::endl;
        }
    }

    return 0;
}
相关问题