You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现指定模式的10×10二维数组?现有JS对角线代码无效

生成指定模式的10×10二维数组

问题描述

需要生成如下模式的10×10二维数组:

1   0   0   0   1   0   0   0   1   0
0   4   0   0   0   4   0   0   0   4
0   0   9   0   0   0   9   0   0   0
0   0   0   16  0   0   0   16  0   0
1   0   0   0   25  0   0   0   25  0
0   4   0   0   0   36  0   0   0   36
0   0   9   0   0   0   49  0   0   0
0   0   0   16  0   0   0   64  0   0
1   0   0   0   25  0   0   0   81  0
0   4   0   0   0   36  0   0   0  100

我原本尝试用对角线模式实现,但生成结果不符合预期,代码如下:

function matrixPattern() {
  let arr = [];
  let len = 10;

  for (let i = 0; i < len; i++) {
    arr[i] = [];

    for (let j = 0; j < len; j++) {
      arr[i][j] = i !== j ? 0 : (i + 1) * (j + 1)
    }
  }
  for (let i in arr) {
    let line = '';

    for (let j in arr[i]) {
      line += arr[i][j] + '\t';
    }

    console.log(line);
  }
}
matrixPattern()

观察目标模式可知,对角线数值会在间隔3个零后重复出现,请问该如何修改代码实现这个模式?

解决方案

规律分析

目标数组的非零值满足两个核心规则:

  1. 位置规则:j % 4 === i % 4,即列索引对4取余的结果等于行索引对4取余的结果,实现每4列重复一次相同的列模式。
  2. 数值规则:非零值是递增的平方数,每个周期(4列)内的数值对应(周期数×4 + 行基准偏移 +1)²,其中周期数为Math.floor(j/4),行基准偏移为i%4。

修改后的代码

function matrixPattern() {
  let arr = [];
  let len = 10;

  for (let i = 0; i < len; i++) {
    arr[i] = [];
    const rowMod = i % 4; // 行索引对4取余,确定当前行的基准位置
    for (let j = 0; j < len; j++) {
      if (j % 4 === rowMod) {
        // 计算当前位置的平方值
        const cycle = Math.floor(j / 4);
        arr[i][j] = Math.pow(cycle * 4 + rowMod + 1, 2);
      } else {
        arr[i][j] = 0;
      }
    }
  }
  
  // 格式化输出,对齐数值
  for (let i = 0; i < len; i++) {
    let line = '';
    for (let j = 0; j < len; j++) {
      line += arr[i][j].toString().padStart(4, ' ');
    }
    console.log(line);
  }
}
matrixPattern()

关键逻辑说明

  • 位置判断:通过j % 4 === rowMod精准定位非零值的位置,确保每4列重复一次相同的列分布。
  • 数值计算:结合列的周期数和行的基准偏移,生成递增的平方数,匹配目标数组的数值规律。
  • 格式化输出:使用padStart方法让每个数值占4位宽度,输出效果与目标数组完全对齐。

内容的提问来源于stack exchange,提问作者Dennis-The14th-Web

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:25:58