如何在Javascript中获取此数字模式输出

时间:2019-02-15 17:55:12

标签: javascript

我正在尝试使用javascript打印此模式。

5
3 5
1 3 5

到目前为止,我已经尝试过for循环

var n = prompt("Enter the number:"); //n=5
for (var i = 1; i <= 3; i++) {
  for (var j = 1; j <= i; j++) {
    if ((i + j) % 2 == 0) {
      document.write(n + " ")
    } else {
      document.write(n - 2 + " ");
    }
  }
  document.write('<br />');
}

但是我只能得到这个输出

5 
3 5 
5 3 5

我如何增强代码?

2 个答案:

答案 0 :(得分:0)

我认为您不需要第二个for循环即可打印金字塔。基本算法的工作原理如下:

  • 一次检查边缘情况(无限循环,负值)
  • 创建用于循环的字符串(str)
  • 将当前数字+“” + str保存到str并打印
  • 缩小预定距离
  • 重复直到达到<0

这是打印金字塔的简单实现:

function printPyramid(length, distance) {
    
    // check for a distance of 0 => infite loop
    if (distance === 0) return "";

    // check for negeative values
    if (distance < 0) distance = Math.abs(distance);
    if (length < 0) length = Math.abs(length);

    str = "";
    for (let i = length; i > 0; i -= distance) {
        str = i + " " + str;
        console.log(str);
    }
}

printPyramid(5, 2);

答案 1 :(得分:-1)

对于刚刚了解发电机的我来说,这是一个有趣的小难题。

function* patternGenerator(end = 3, num = 0) {
  let iterationCount = 0;
  let pattern = "";

  for (let i = 0; i < end; i += 1) {
    pattern = `${num - iterationCount * 2} ` + pattern;
    iterationCount++;
    yield pattern.trim();
  }
}

for (let value of patternGenerator(3, 5)) {
  document.write(value);
  document.write("<br />");
}

working sandbox