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

求助:如何用JavaScript for循环实现指定对称图形的打印函数?

解决对称图案的printImage函数问题

我来帮你搞定这个图案生成的问题!你的原始代码是按行的奇偶性整行填充相同字符,这和需求的中心对称图案不符。我们需要根据每个位置与中心的距离来决定填充x还是=,这样才能实现目标的对称渐变效果。

核心思路

因为参数是奇数,我们可以先计算图案的中心索引:mid = Math.floor(oddnumbers / 2)(比如边长5时,mid=2;边长7时,mid=3)。对于每一行i和每一列j,当i到中心的距离等于j到中心的距离时,就填充x,否则填充=。这个逻辑能完美匹配你要的对称十字图案。

修改后的代码

function printImage(oddnumbers) {
  const mid = Math.floor(oddnumbers / 2); // 计算中心位置的索引
  for (let i = 0; i < oddnumbers; i++) {
    let tmp = '';
    for (let j = 0; j < oddnumbers; j++) {
      // 判断当前位置是否在对称的x线上
      if (Math.abs(i - mid) === Math.abs(j - mid)) {
        tmp += 'x';
      } else {
        tmp += '=';
      }
    }
    console.log(tmp);
  }
}

测试验证

运行printImage(5)会输出:

x=x
=x=x=
x
=x=x=
x
=x

运行printImage(7)会输出:

x=x
=x
=x=
x=x
=x=
x=x
=x
=x=
x=====x

代码细节解释

  1. 中心索引计算:利用Math.floor(oddnumbers / 2)精准定位图案的中心行和中心列,因为参数是奇数,这个索引正好是图案的正中心。
  2. 双层循环遍历:外层循环控制每一行,内层循环控制该行的每一个字符位置。
  3. 对称判断逻辑:Math.abs(i - mid)计算当前行到中心行的距离,Math.abs(j - mid)计算当前列到中心列的距离,两者相等时就放置x,其余位置用=填充,这样自然形成对称的图案。

这个方案完全用循环实现,没有任何硬编码,能适配任意奇数边长的参数。

内容的提问来源于stack exchange,提问作者Bayu Dirgantara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:33:13