JavaScript循环实现特定三角数字图案遇逻辑问题,求解决方案
解决JavaScript生成三角数字图案的问题
你的代码存在几个关键问题,导致无法得到预期输出:
- 填充符号使用了
-,但预期是= - 数字串的生成逻辑错误:当level递减时,你生成的是从1到level-1的重复数字,而实际上每一行应该从当前起始数字(如第二行从2开始)到maxNum-1的重复数字
- 填充长度的计算逻辑虽然方向对,但因为数字串本身错误,导致填充后的结果不符合预期
下面是修正后的代码,完全符合你的输出需求:
function nomor4(maxLevel) { const totalLength = maxLevel ** 2; // 总长度是maxLevel的平方,比如4²=16 const result = []; for (let start = 1; start <= maxLevel; start++) { let left = ''; // 生成左边数字串:从start到maxLevel-1,每个数字重复自身次数 for (let num = start; num < maxLevel; num++) { left += String(num).repeat(num); } // 中间固定是maxLevel重复maxLevel次 const middle = String(maxLevel).repeat(maxLevel); // 生成右边数字串:从maxLevel-1到start,每个数字重复自身次数 let right = ''; for (let num = maxLevel - 1; num >= start; num--) { right += String(num).repeat(num); } // 计算需要填充的=的数量,两边对称 const fillCount = (totalLength - (left.length + middle.length + right.length)) / 2; const fill = '='.repeat(fillCount); // 拼接该行 const line = fill + left + middle + right + fill; result.push(line); } return result.join('\n'); } console.log(nomor4(4));
代码说明:
- 先计算总长度:因为图案是对称的,总长度等于
maxLevel的平方(比如4级时总长度16) - 循环每一行的起始数字
start(从1到maxLevel):- 左边拼接从
start到maxLevel-1的重复数字 - 中间是固定的
maxLevel重复自身次数 - 右边拼接从
maxLevel-1到start的重复数字 - 计算需要填充的
=数量,保证每行长度等于总长度,两边对称填充
- 左边拼接从
- 最后把所有行拼接成字符串返回
运行这段代码后,会输出你预期的图案:
1223334444333221 =22333444433322= ===3334444333=== ======4444======
内容的提问来源于stack exchange,提问作者Helmi Farizki
相关产品推荐
相关产品推荐

