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

JavaScript打印边缘为奇数的数字金字塔问题求解

边缘奇数数字金字塔打印修复

预期效果

示例中点号仅用于占位展示缩进,实际为空格,n=5时输出结构如下:

.......5
...3,4,3
1,2,3,2,1

原有实现代码

function p(n){
  let string = "";

for (let i = 1; i <= n; i++) {
 
  for (let j = 1; j <= n - i; j++) {
   string += " " ;
  }
  
  for (let k = 1; k <= 2*i-1; k++) {
    string += n-k +1;
  }
 string += "\n";
}
console.log(string);
  
}


p(5);

原有代码问题

  • 行数遍历逻辑错误:原代码遍历1到n所有行,实际只需要输出边缘值为奇数的行,从n倒序每次减2直到1即可
  • 缩进计算错误:原代码按单字符宽度计算缩进,未考虑数字间的逗号占位,无法实现居中效果
  • 内容生成逻辑错误:原代码直接拼接数字未添加逗号分隔,数字增减序列不符合要求,没有实现先增后减的对称结构

修复后代码

function p(n){
  let string = "";
  // 从最大奇数边缘值开始,每次减2遍历到1,仅输出需要的行
  for (let edge = n; edge >= 1; edge -= 2) {
    const maxVal = (n + edge) / 2;
    const numArr = [];
    // 拼接递增段:从当前边缘值涨到行最大值
    for (let i = edge; i <= maxVal; i++) {
      numArr.push(i);
    }
    // 拼接递减段:从最大值-1降回当前边缘值
    for (let i = maxVal - 1; i >= edge; i--) {
      numArr.push(i);
    }
    const lineContent = numArr.join(',');
    // 按最长行宽度计算前置缩进,保证居中
    const maxLineLen = 2 * n - 1;
    const indent = ' '.repeat((maxLineLen - lineContent.length) / 2);
    string += indent + lineContent + '\n';
  }
  console.log(string);
}

p(5);

调用p(5)即可输出符合要求的居中数字金字塔,数字间用逗号分隔,每行边缘值均为奇数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:42:17