【问题标题】:How to display pyramid using JavaScript?如何使用 JavaScript 显示金字塔?
【发布时间】:2014-01-11 09:36:16
【问题描述】:

这里是显示金字塔的代码,但它并不完全产生所需的输出。

function generatePyramid() {
  var totalNumberofRows = 5;
  var arr = new Array();
  for (var i = 1; i <= totalNumberofRows; i++) {
    for (var j = 1; j <= i; j++) {
      arr.push(j);
      console.log(j);
    }
    console.log("\n");
  }
}

【问题讨论】:

  • 那么需要的输出是什么?
  • 图像是所需的输出我如何以这种格式显示?

标签: javascript for-loop cordova


【解决方案1】:
for(star = "*"; star.length < 8; star += "*"){
     console.log(star);}

【讨论】:

    【解决方案2】:
      function pyramid(){
            var lines = 5;
            var triangle = "";
            for(var i = 0; i < lines; i++){
                for(var j = i; j < lines; j++) {
                    triangle += " "
                }
                for(var j = 0; j <= i; j++) {
                    triangle += "X "
                }
                triangle += "<br>"
            }
            console.log(triangle)
        }
    

    【讨论】:

    • 已经发布了这么多其他答案,您需要解释您的答案与那些旧解决方案有何不同或更好的原因。
    【解决方案3】:
    function printNumbers(rows){
      for(let i=1;i<=rows; i++){
       let str='';
       for(let j=1;j<=i; j++){
        str = str + j+' ';
       }
       console.log(str);
      } 
    }
    printNumbers(5);
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以在help center找到更多关于如何写好答案的信息。
    【解决方案4】:

    function pyramid(n) {
      for (let i = 2; i < n + 2; i++) {
        console.log(" ".repeat(n + 2 - i) + "*".repeat((i - 2) + (i - 1)));
      }
    };
    
    pyramid(10);

    这是另一个解决方案,利用斐波那契数列: 1、3、5、8、13等

    【讨论】:

      【解决方案5】:
      <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Pyramid triangle star pattern - javascript</title>
      </head>
      <body>
        <h2>Pyramid triangle star pattern in javascript</h2>
        <script>
          let n = 5;
      
          // External loop
          for (let i = 1; i <= n; i++) {
            // printing spaces
            for (let j = n; j > i; j--) {
              document.write('&nbsp;')
            }
            // printing star
            for (let k = 0; k < i * 2 - 1; k++) {
             document.write("*")
            }
          document.write("<br/>")
          }
      
        </script>
      </body>
      </html>```
      

      【讨论】:

      • 建议:您可以简单地显示 javascript 而无需不必要的 html 代码
      【解决方案6】:

      function pyramid(row){
          for(var i = 0; i <=row; i++){
              var space="";
              for(let s = 0; s<=(row-i-1); s++){
                  space= space+" ";
              }
              var result="";
              for (var j = 1; j <=2*i+1; j++ ){
                  result= result+"*"; //result=result+*
              }
              console.log(space+result);
                result="";
          }
         return result;
      }
      console.log(pyramid(5));

      【讨论】:

        【解决方案7】:

        我的解决方案。

        function pyramid(n) {
        // generate base of pyramid, aka longest possible string
        let limit = n+n-1;
        
        let hashesToPrint = 1; // number of hashes to print
        for (let i=0; i<n; i++) {
            
            // get length of spaces we need on each side
            let difference = (limit - hashesToPrint) / 2;
            
            // generate spaces string
            let spaces = ' '.repeat(difference);
        
            // create pounds string
            let pounds = '#'.repeat(hashesToPrint);
        
            // append spaces on either side of our pound string
            let newString = spaces + pounds + spaces
        
            console.log(newString)
        
            // increment our counter by two
            hashesToPrint += 2
        }
        

        }

        金字塔(3)

        【讨论】:

          【解决方案8】:

          最简单的解决方案之一是使用 .repeat 函数

          let count = 1;
          let x = "# ";
          for (a = 0; a<=5; a +=1){
              console.log(x.repeat(count));
              count +=1;
          }

          【讨论】:

            【解决方案9】:

            **您可以为任何模式的循环条件设置框架,给定它可能是三角形、直角三角形、倒三角形等。有关更多信息,请参阅下面的代码和工作簿图像。 PS:在步骤 6 的工作簿图像中,它是 2 + i 而不是 3+i 因此 j >= 4 - i && j = n+1 - i && j

            编辑:在第 6 步的工作簿图像中,它是 2+i 而不是 3+i,因此 j >=4 - i && j = n + 1 - i && j

            1, 3, 5, 7, 9 =&gt;奇数系列(星号)以金字塔图案出现
            1, 2, 3, 4, 5 =&gt;计数器(行数)

            对于每个计数器都存在(2 * n) - 1

                function pyramid(n) {  // Input or number of rows
                    for (var i = 1; i <= n; i++) {
                        var s = "";
                        // For every each counter there exist 2*n-1 value
                        for (var j = 1; j <= (2 * n - 1); j++) {
                          // Hint: Check the workbook image
                            (j >= n + 1 - i && j <= n - 1 + i) ? s += "*" : s += " ";   
                        }
                        console.log(s);
                    }
                }
                pyramid(5);
            

            根据您的要求,以下代码应该没问题:

                function generateNumberTriangle(v) {
                for (var i = 1; i <= v; i++) {
                    var chars = " ";
                    for (var j = 1; j <= v; j++) {
                        if (j <= i) { chars += j + "  "; }
                    }
                    console.log(chars);
                }
            }
            generateNumberTriangle(7);
            

            【讨论】:

              【解决方案10】:

              这么多鼓舞人心的答案; 我喜欢添加我的:)

                  let m, o, r, c, pr = (n, x = (n << 1) - 1) => {
                      m = (x >> 1) << 0;
                      o = '';
                      for (r = 0; r < n; r++) {
                          for (c = 0; c < x; c++)
                              o += (m - r <= c && m + r >= c) ? "#" : " ";
                          o += '\n';
                      }
                      console.log(o);
                  }
              
                  pr(5);
                  pr(20);
                  pr(2);
              

              【讨论】:

                【解决方案11】:

                函数金字塔(n){ const midpoint = Math.floor((2 * n-1)/2);

                for(let row = 0 ; row

                 for(let column = 0 ; column < 2*n-1 ; column++)
                    {
                     if(midpoint-row <= column && midpoint + row >= 
                        column){
                        level += '#';
                       }
                       else{
                           level += ' ';
                           }
                
                    }
                   console.log(level);
                  }
                

                }

                金字塔(5);

                【讨论】:

                  【解决方案12】:

                  如果您想使用符号或单个数字打印出直角三角形。您可以使用以下代码。

                  let pyramid = '';
                  for(pyramid.length=0; pyramid.length<=7 ; pyramid+='#'){
                    console.log(pyramid);
                  }
                  

                  【讨论】:

                    【解决方案13】:

                    如果我们谈论的是“金字塔”问题,那么这将是一个合适的解决方案。

                    function pyramid(n) { // If (e.g.) n=3;
                      const columnLength = (n * 2) - 1; // 5 
                      let middle = Math.floor(columnLength / 2) // middle would be 2
                      for(let row=0; row<n; row++) { // let's create the rows (row = horizontal)
                        let res = ''; // init our output inside of the 1st for loop
                        for(let col=0; col<columnLength; col++) { // creating the columns (column = vertical)
                    // The following formula would yield the result we need: 
                    // (n * 2) - 1 => row=2;col=3; row=3;col=5; row=5;col=9
                    // We got 2 sides, right? 
                    // So, before we insert '#' we need to make sure the following logic is met:
                    // Look at:  (middle - row) as being the left side and  (middle + row) as the right one.
                    // Only if both conditions are met, we want to insert the "#" sign
                          if(middle - row <= col && middle + row >= col ) {
                             res += '#';
                          } else {
                    // If '#' is NOT inserted then we want to insert something else, right?! 
                    // In our case that would be an empty string
                            res += ' ';
                          }
                        }
                        console.log(res);
                      }
                    }
                    
                    pyramid(3);

                    如果我们想要更加“花哨”,我们可以实现递归:

                    function recursiveP(n, row=0, res='') { // IMPORTANT: Pass some default values
                          const columnLength = (n * 2) - 1;
                          let middle = Math.floor(columnLength / 2);
                          // This is our EXIT condition, meaning, if have the n number of rows, our work is done!!
                          if(n === row) {
                            return;
                          }
                          //  *** Moving on ***
                          //   Initially, this will be skipped, and we'll go to the next check and add the appropriate character,
                          //   however, after we're finished w/ creating the 1st row we'll hit this check, we'll print the previously generated result,
                          //   and call the function again, but this time incrementing the ROW value. This will continue until the 1st check is met
                          if(res.length === columnLength) {
                             console.log(res);
                             return recursiveP(n, row + 1);
                          }
                          //   Here we're creating the columns and in each, we're inserting the appropriate char
                          if(middle - row <= res.length && middle + row >= res.length ) {
                             res += '#';
                          } else {
                             res += ' ';
                          }
                          //Initial [recursive] function call
                          recursiveP(n, row, res);
                        }
                        
                        recursiveP(6);

                    【讨论】:

                      【解决方案14】:

                      一个有趣的小解决方案:)

                      //set the value of n here      
                      var n = 5;
                      generateNumberTriangle(n);
                      
                      function generateNumberTriangle(n) {
                          var width = (2 * n) -1; // Always the case.
                          var midpoint = Math.floor(width / 2); // Middle of pyramid.
                          let level = ''; // will be reset each level loop
                      
                          for(var i = 0; i < n; i++) { // Looping through levels
                              level = '';
                              for(var j = 0; j < width; j++) {
                                  if(j < midpoint-i || j > midpoint+i) {
                                      level += '.';
                                  } else {
                                      level += '#';
                                  }
                              }
                              console.log(level);
                          }
                      }

                      【讨论】:

                        【解决方案15】:

                        这将在控制台中创建一个适当的金字塔:

                        function createPyramid(rows)
                        {
                            for (let i = 0; i < rows; i++) {
                                var output = '';
                                for (let j =0; j < rows - i; j++) output += ' ';
                                for (let k = 0; k <= i; k++) output += '* ';
                                console.log(output);  
                            } 
                        }
                        
                        createPyramid(5) // pass number as row of pyramid you want.

                        【讨论】:

                          【解决方案16】:

                          试试下面的代码

                          function generatePyramid() {
                              var totalNumberofRows = 5;
                              var output = '';
                              for (var i = 1; i <= totalNumberofRows; i++) {
                                  for (var j = 1; j <= i; j++) {
                                      output += j + '  ';
                                  }
                                  console.log(output);
                                  output = '';
                              }
                          }
                          
                          generatePyramid();
                             

                          【讨论】:

                            【解决方案17】:

                            短途

                             function generatePyramid(n) {
                                    var output="";
                                    for (var i = 1; i <= n; i++) {
                                        output += i + " ";
                                        console.log(output);
                                    }
                                }  
                            
                                generatePyramid(5);
                            

                            【讨论】:

                              【解决方案18】:

                              假设您想返回数字而不是其他答案所示的星号,这就是解决方案:

                              请注意,此解决方案以线性 (O(n)) 时间复杂度运行,并且不会通过将每一行记录到控制台来牺牲性能,而是一次记录整个金字塔。

                              function generatePyramid(n) {
                                let pyramid = '';
                                let prev;
                              
                                for (let i = 1; i <= n; i++) {
                                  if (prev) {
                                    pyramid += '\n';
                                    prev =  prev + ' ' + i;
                                  } else {
                                    prev = i;
                                  }
                                  pyramid += ' '.repeat(n - i) + prev;
                                }
                              
                                return pyramid;
                              }
                              

                              这样登录到控制台:console.log(generatePyramid(n));

                              如果您只想按照问题中的图片所示绘制一个三角形,则此函数将执行此操作(同样,以线性时间复杂度):

                              function drawTriangle(n) {
                                let triangle = '';
                                let prev;
                                for (let i = 1; i <= n; i++) {
                                  if (prev) {
                                    triangle += '\n';
                                    prev = prev + ' ' + i;
                                  } else {
                                    prev = i;
                                  }
                                  triangle += prev;
                                }
                                return triangle;
                              }
                              

                              【讨论】:

                                【解决方案19】:

                                最简单的解决方案是:-

                                function pyramid(n) {
                                
                                 
                                
                                  for(let i=1; i<= n; i++){
                                
                                    let str = ' '.repeat(n-i);
                                
                                    let str2 = '*'. repeat(i*2 -1)
                                
                                 
                                
                                    console.log(str + str2 + str);
                                
                                  }
                                
                                }
                                
                                pyramid(5);

                                【讨论】:

                                  【解决方案20】:

                                  使用 JavaScript 在控制台上绘制金字塔

                                  1. 使每一行的填充字符为奇数。
                                  2. 在每行之前添加空格(或“间隔字符”),不包括最后一行
                                    要执行此操作:
                                    • 使用repeat() 确定每行的间隔字符数。您可以通过传递 行数 - 1 作为参数来做到这一点。

                                  这是我的解决方案

                                  function drawPyramid(lines, fillChar, spacerChar) {
                                    let fillChars = '';
                                    let spacer = spacerChar || ' '; // Default spacer is ' '
                                    let spacerCount = lines;
                                  
                                    for (let i = 1; i <= lines; i++) {
                                        fillChars += fillChar;
                                  
                                    // Makes lines always have an odd number of fill characters
                                      if (i >= 2)
                                          fillChars = fillChar + fillChars;
                                  
                                      console.log(spacer.repeat(spacerCount - 1) + fillChars);
                                      spacerCount--;
                                    }
                                  }
                                  
                                  drawPyramid(4, '*');

                                  【讨论】:

                                    【解决方案21】:

                                    在这种情况下,我会坚持递归方法

                                    function generatePyramid (n, row = 0, line = '', number = 1) {
                                      
                                        if(row === n){
                                          return;
                                        }
                                        
                                        if (line.length === n) {
                                            console.log(line )
                                            return generatePyramid (n, row + 1)
                                        } 
                                        
                                        if (line.length <= row) {
                                            line += number;
                                        } else {
                                            line += ' ';
                                        }
                                        
                                        generatePyramid (n, row, line, number + 1)
                                      }

                                    【讨论】:

                                      【解决方案22】:
                                      function pyramid() {
                                          var n = 5;
                                          var output="";
                                          for (var i = 0; i <n; i++) {
                                          var myspace = "";   
                                          for(let s = 0; s <(n-i-1); s++) {
                                              myspace += " ";
                                          }
                                              for (var j = 1; j <= 2*i + 1; j++) {
                                                  output+="*";
                                      
                                              }
                                              console.log(myspace+output);
                                              output="";
                                          }
                                      }
                                      

                                      输出

                                                  *
                                      VM74:11    ***
                                      VM74:11   *****
                                      VM74:11  *******
                                      VM74:11 ********* 
                                      

                                      【讨论】:

                                        【解决方案23】:

                                        另一个选项

                                        一行代码:

                                        function generatePyramid(n) {
                                            return [...Array(n)]
                                                .forEach((_, i) => console.log([...Array(++i)].map((_, j) => ++j).join(' ')));
                                        }
                                        

                                        【讨论】:

                                          【解决方案24】:

                                          数字金字塔的简单代码

                                          for(var i=1; i<=5; i++){
                                           var Num='';
                                           for(var j=0; j<i; j++){
                                               Num += i;
                                           }
                                           print(Num) }
                                          

                                          【讨论】:

                                            【解决方案25】:
                                              const pyramid = (n)=>{
                                              const mid = Math.floor((2*n-1)/2);
                                              for(let row=0; row<n; ++row)
                                              {
                                                //for each row, make empty steps
                                                let level = ''
                                                for(let col=0; col<2*n-1; col++)
                                                {
                                                  if(mid-row <=col && mid+row >= col)
                                                    level+='#';
                                                  else level +=' ';
                                                }
                                                console.log(level);
                                              }
                                            }
                                            pyramid(3);
                                            

                                            【讨论】:

                                              【解决方案26】:

                                              这是一个使用 ES6 语法的简单解决方案

                                              function generatePyramid(num) {
                                                let number = '';
                                              
                                                for (let i = 1; i <= num; i++) {
                                                  console.log(number += i);
                                                }
                                              }
                                              generatePyramid(5);
                                              

                                              【讨论】:

                                              • 我认为这不会显示为金字塔,它几乎只会显示与 OP 在他们的问题中提出的相同的内容,这不是预期的结果。
                                              • 在控制台执行时:1 12 123 1234 12345 这不是问题要求的吗?
                                              • 不,那是三角形,不是金字塔。这会产生他们已经得到的输出,但不是他们需要的。
                                              【解决方案27】:
                                              function generatePyramid(num) {
                                                for (var i = 1; i <= num; i++) {
                                                  var arr = [];
                                                  for (var j = 1; j <= i; j++) {
                                                    arr.push(j);
                                                  }
                                                  console.log(arr);
                                                }
                                              }
                                              

                                              【讨论】:

                                                【解决方案28】:

                                                为什么不这样?

                                                let printPyramid = (n) => {
                                                    if (n===0) {
                                                        return false;
                                                    } else {
                                                        let arr = [];
                                                        for(let i=0; i<n; i++) {
                                                           arr.push(i);
                                                           console.log(arr.toString());
                                                        }
                                                    }
                                                }
                                                

                                                【讨论】:

                                                  【解决方案29】:

                                                  这可以使用单个 for 循环来完成。

                                                  var num = "";
                                                  var size = prompt("Enter the size of the pyramid");
                                                  for(var i=1; i<=size; i++)
                                                  {
                                                    num = num + i
                                                    console.log(num);
                                                  }

                                                  【讨论】:

                                                  • 金字塔不是直角三角形。
                                                  • 我想我和提出这个问题的人都不太关心金字塔是什么以及它的外观。
                                                  【解决方案30】:

                                                  你应该在每行迭代时生成一个数组并在最后输出:

                                                  function generatePyramid() {
                                                      var totalNumberofRows = 5,
                                                          arr;
                                                      for (var i = 1; i <= totalNumberofRows; i++) {
                                                          arr = [];
                                                          for (var j = 1; j <= i; j++) {
                                                              arr.push(j);            
                                                          }
                                                          console.log(arr.join(" ") + "\n");
                                                      }
                                                  }
                                                  

                                                  【讨论】:

                                                    猜你喜欢
                                                    • 2018-06-06
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    相关资源
                                                    最近更新 更多