我对编程很陌生,在编写java作业时遇到了问题。
这篇文章的快速定义:
我得到了一个8x8矩阵的字符,矩阵中的一个特定位置,并试图找出三件事:
我找不到关于这个问题的任何内容所以我想出了我将用伪代码给出的这些解决方案:
假设指数从0到7如下:
0 1 2 3 ... 7
0
1
2
3
.
.
7 ... .
如果给你一个位置X(n,m),为了获得对角线1的起始位置你可以这样:
while(n>0 && m>0){
n--;
m--;
}
diagonal1.startingPosition = (n, m);
对于对角线2:
while(n<7 && m>0){
n++;
m--;
}
diagonal2.startingPosition = (n, m);
计算起始位置后,这些对角线的长度应为:
//the (n, m) used here are the values after the specific while loops,
//not the original (n, m). So for diagonal1, at least one of them == 0
//and for diagonal2, either n == 7 or m == 0.
diagonal1.length == (8 - max(n, m));
diagonal2.length == (8 - min(n, m));
我认为这种方法适用于任何方阵。
现在,有什么公式我不知道找到所有这些信息吗? 有一个更简单的解决方案吗? 我在这里错过了一些基本的(数学?)概念吗?
感谢您的时间
编辑(使用的一些实际代码):
/*
Finding the diagonal from top left to bottom right
NOTE: in this case, diagonalStartingRow = n, and diagonalStartingColumn = m.
this way I do not actually change the original position (n,m), but I get the correct
starting position to calculate the length of the diagonal, which I use in the for loop below the while loop
*/
while(diagonalStartingRow > 0 && diagonalStartingColumn > 0){
diagonalStartingRow--;
diagonalStartingColumn--;
}
for (int i = 0; i < 8 - Math.max(diagonalStartingRow,diagonalStartingColumn); i++) {
//the chessBoard is the 2D char array and the diagonalString1 will hold the String of the diagonal
diagonalString1 += chessBoard[diagonalStartingRow+i][diagonalStartingColumn+i];
}