我完成了以下任务:
“实施函数numberMatrix()
(使用JS),该函数创建矩阵5x5的HTML视图,如下所述:
1 3 3 3 3
2 1 3 3 3
2 2 1 3 3
2 2 2 1 3
2 2 2 2 1
!注意:不允许使用
这样的硬编码数组const arr = [[1,3,3,3,3], [2,1,3,3,3], [2,2,1,3,3], [2,2,2,1,3], [2,2,2,2,1]];
可能还有其他一些数字。尝试使用方阵术语和功能:主对角线,主对角线上方/下方的元素。
要生成HTML视图,请仅使用带有任何所需标记的document.write()
方法。
还建议实现单独的函数以生成矩阵(二维数组)并生成HTML视图。”
我知道如何创建硬编码矩阵的HTML视图:
function numberMatrix() {
let numbers = [
[1, 3, 3, 3, 3],
[2, 1, 3, 3, 3],
[2, 2, 1, 3, 3],
[2, 2, 2, 1, 3],
[2, 2, 2, 2, 1]
];
let x = 0;
while (x < 5) {
for (let i = 0; i < 5; i++) {
document.write(numbers[x][i]);
}
document.write('<br>');
x++;
}
}
我的主要问题是使用方阵术语和特征实现生成矩阵的功能:主对角线,主对角线上方/下方的元素,如上所述。
答案 0 :(得分:0)
一些基本思想:
对角线是外部数组和内部数组的索引相等的地方。
要获取另一个对角线,可以添加外部数组和内部数组的索引,并检查总和是否等于长度减一。
-
通过仅取从(0,0)到(4,4)的第一个对角线,并通过对索引进行另一种查看,您发现外部索引必须大于内部索引。
| 0 1 2 3 4
---+---------------
0 | 1 . . . .
1 | . 1 . . .
2 | . . 1 . .
3 | . . . 1 .
4 | . . . . 1
| 0 1 2 3 4
---+---------------
0 | . . . . 1
1 | . . . 1 .
2 | . . 1 . .
3 | . 1 . . .
4 | 1 . . . .
剩下的就是填满 | 0 1 2 3 4
---+---------------
0 | . . . . .
1 | 2 . . . .
2 | 2 2 . . .
3 | 2 2 2 . .
4 | 2 2 2 2 .
,然后由您决定。
答案 1 :(得分:0)
这是一个依赖函数生成器的解决方案。
函数生成器buildSquaredMatrix
将负责生成一个方阵,提供方阵的大小,对角线所需的值,对角线以下元素的所需值以及大于对角线元素的所需值。对角线。
我不是数学大师,因此我很确定这可以通过不同的方式完成,但是我只是希望这将帮助您发现实现目标的其他方式(例如,使用函数生成器)或为您提供有关问题的进一步说明。
无论如何,此解决方案适用于任何大小的矩阵。
/**
Builds a square matrix starting from the desired size.
*/
function *buildSquaredMatrix(size, diagonal, belowDiagonal, aboveDiagonal) {
// Build each row from 0 to size.
for (var i = 0; i < size; i++) {
// Current array is composed by the "below diagonal" part, defined by the range 0 -> i, and the "above diagonal" part, defined by the range i -> size.
// The concatenation will lead to an array of <size> elements.
const current = Array.from({length: i}).fill(belowDiagonal).concat(Array.from({length: size - i}).fill(aboveDiagonal));
// finally, we set the diagonal item, which always is at index <i>.
current[i] = diagonal;
// then, we yield the current result to the iterator.
yield current;
}
}
// Below, we define a new 5x5 matrix /size 5), where the diagonal value is 1, the value below the diagonal is 2, and above is 3.
for (var row of buildSquaredMatrix(5,1,2,3)) {
// finally, we join the row with a blankspace, and separe the rows with a break.
document.write(row.join(' ') + '<br />');
}