簡體   English   中英

從二維數組的給定索引中找到對角線元素的總和

[英]find sum of diagonal elements from given index in 2d array

我必須構造一個包含N,M行和列(N&M <= 5)的2d數組,然后用戶輸入某個索引(位置),例如2,3(matrix [2] [3]),假設兩個數字在矩陣的范圍內。 從那時起,我必須找到經過該數字的左右對角線的總和,但是該數字不包括在總和中。

例如,二維數組是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)

(這是錯誤的書面偽代碼,對不起)

當我輸入不在頂行或底行中的數字時,它會很好地工作,但是如果它們位於該行中,則程序會停止。

您擁有的基本上是好的偽代碼。 我首先想到的是,在確定位置是否超出范圍時,應使用&&而不是||。

您還需要采取某種方式盡早離開,以防其位置不正確。 下面是我迅速寫出的一些代碼,看起來似乎一目了然-我遍歷了所有可能的起始位置,包括超出范圍的位置。

#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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM