我必须构造一个具有N,M行和列(N&M<=5)的2d数组,然后用户输入某个索引(位置),如2,3(matrix[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)
(这是写得不好的伪代码,对不起)
当我输入不在顶行或底行的数字时,它工作得很好,但如果它们位于那里,我的程序就会停止。
您所拥有的基本上是好的伪代码。我的第一个想法是你应该使用&;'s,而不是||的。
你还需要某种方式提前离开,以防他们给出一个糟糕的位置。下面是我很快写出来的一些代码,看起来很快就可以工作了——我循环遍历每一个可能的起始位置,包括那些越界的位置。
#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;
}