gpt4 book ai didi

c++ - 从二维数组中的给定索引中找到对角线元素的总和

转载 作者:行者123 更新时间:2023-11-30 05:45:55 24 4
gpt4 key购买 nike

我必须构造一个具有 N,M 行和列的二维数组 (N & M <= 5),然后用户输入某个索引(位置),如 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;
}

关于c++ - 从二维数组中的给定索引中找到对角线元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com