代码之家  ›  专栏  ›  技术社区  ›  Ashy Ashcsi

javascript如何在同一行上打印星形图案

  •  0
  • Ashy Ashcsi  · 技术社区  · 4 年前

    我想用*打印钻石图案。请在下面查找代码:

    for (let i=0; i<num; i++) {
        let str="";
        for (let j=i; j<num; j++) {
            str+="*";
        }
        console.log(str);
    }
    
    for (let i=num; i>0; i--) {
        let spaces=num-i;
        let spacesStr="";
        for (let j=0; j<spaces; j++) {
            spacesStr+=" ";
        }
        let str=spacesStr;
        for (let j=i; j>0; j--) {
            str+="*";
        }
        console.log(str);
    }
    

    上述代码的输出如下:

    ****
    ***
    **
    *
    ****
     ***
      **
       *
    

    我知道,如果我开始打印第1行的两个图案,我可以获得所需的输出。但我不确定我怎么能做到。请告诉我。

    谢谢

    2 回复  |  直到 4 年前
        1
  •  0
  •   Arrow    4 年前

    你已经猜出答案了。你需要在主循环中使用3个for循环,才能获得该模式。

    let num = 5;
    let string = "";
    
    for (let i = 0; i <= num; i++) {
      // printing star
      for (let j = 0; j < num - i; j++) {
        string += "*";
      }
      // printing spaces
      for (let k = 0; k < i * 2; k++) {
        string += " ";
      }
    
      // printing stars
      for (let l = num - i; l > 0; l--) {
        string += "*";
      }
      string += "\n";
    }
    
    console.log(string);
    

    首先,我们打印左边的星星,然后打印空格,然后再打印右边的星星。

        2
  •  0
  •   vighnesh153    4 年前

    我们的想法是建造每一条生产线。

    首先,让我们关注钻石的上半部分。

    • 在第一行,有 n 星星, 0 空间, N 星星。
    • 在第二行,有 n-1 星星, 2 空间, n-1 星星。
    • 在第三行,有 n-2 星星, 4 空间, n-2 星星。
    • 这种模式一直延续到 0 星星。

    现在,在钻石的下半部分,图案是一样的,只是颠倒了。所以,对于内部循环,你可以改变 i n-i n-i .

    const n = 5;
    const star = "*";
    const space = " ";
    
    // Top half of the diagram
    for (let i = 0; i < n; i ++) {
      let pattern = ''
      for (let j = 0; j < (n - i); j++) pattern += star;
      for (let j = 0; j < i; j++) pattern += `${space}${space}`;
      for (let j = 0; j < (n - i); j++) pattern += star;
      console.log(pattern);
    }
    
    // Bottom half of the diagram
    for (let i = 1; i <= n; i ++) {
      let pattern = ''
      for (let j = 0; j < i; j++) pattern += star;
      for (let j = 0; j < (n - i); j++) pattern += `${space}${space}`;
      for (let j = 0; j < i; j++) pattern += star;
      console.log(pattern);
    }