创建矩阵5x5的函数+创建矩阵HTML视图的函数

时间:2019-06-27 08:23:55

标签: javascript html arrays function matrix

我完成了以下任务:

“实施函数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++;
  }
}

我的主要问题是使用方阵术语和特征实现生成矩阵的功能:主对角线,主对角线上方/下方的元素,如上所述。

2 个答案:

答案 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 />');
}