찾다

 >  Q&A  >  본문

console - JavaScript中,使用for循环输出如下图形(等腰三角形,和平行四边形)?原理是啥?

JavaScript中,使用for循环输出如下图形(等腰三角形,和平行四边形)?原理是啥?
最近在学习for循环,但是数学不是很好,老师说和数学没有太大关系,但是我实在想不出来,求教各位了;

1;只是使用for循环,(最多使用2次)最多使用4个变量,并且改一个变量就可以更改行数。
代码:

for(var a=0,b="";a<5;a++){
    b+="*";
    console.log(b);
}

输出为:

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

倘若我要输出:

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

如果是反方向的,该怎么想?

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

等腰三角形,如果是倒立的,规律是怎样的?如果是等边三角形,又是怎样的?只能用for循环,
看看我的想法和大家的是否一致,希望大家帮帮我这个初学js的小生。祝大家假期愉快~~~!!!

PHP中文网PHP中文网2816일 전1122

모든 응답(5)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-11 13:13:59

    这个和语言没有太大关系,所以和JS无关

    这个其实是思维方面的,一般完完全全从0到学编程,都会遇到这样的问题,这样的问题虽然简单,但其实就是看你能不能将问题转化为程序的思维

    说回这个问题就是:你怎么看待星号和空格

    第一个就是星号每次都在递增,这是和循环变量a挂钩的

    后面两个是,星号都是5个,空格在递增,空格数和a挂钩

    最后两个是空格和星号都和a挂钩


    PS:如果很久都还没转过弯来,是该考虑自己是否适合编程,话比较糙。。。

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-11 13:13:59

    解法很多种。 无非就是在控制空格和符号的数量。 正三角就是初始值为1,逐渐增加;倒三角就是初始值为符号个数,递减。

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 13:13:59

    这也是我刚接触编程的时候做过的,刚开始的时候也是没想通。其实多想想就可以了。他的解法很多。
    说一个我的解法吧。首先用for()的话,肯定看他多少行,就表示循环多少次。
    这种图形都是由空格和*组成的。那么就看它的组合规律,这种对称图形一般看半边就行了。
    比如第一个平行四边形:他是由第一行是由0个左边空格+5个组成,最后一行是由4个左边空格+5个组成,那么等于从第一行开始左边空格1个1个往上递增。
    解法:接下来设置三个变量:i(行数) j(*的个数) k(左边空格的个数)

    for(var i=0,j="*****",k="";i<5;i++){//初始化,就是第一行的情况,0个左边空格,5个*
                console.log(k+j);//表示空格+*的组合
                k+=" ";         //表示左边空格的变化,一次+1
    }

    那么第个二四边形:他是由第一行是由左边4个空格+5个组成,最后一行是由左边0个空格+5个组成,那左边么空格就是依次递减一个。

    for(var i=0,j="*****",k="    ";i<5;i++){//初始化,就是第一行的情况,4个左边空格,5个*
                    console.log(k+j);//表示空格+*的组合
                    k=k.slice(1);   //表示左边空格的变化,依次减一,不知道这个slice自行百度
                }

    那么第一个三角形:他是由第一行是由左边3个空格+1个组成,最后一行是由0个空格+7个组成,那么规律就是左边空格就是依次递减一个,*依次递增两个。

    for(var i=0,j="*",k="   ";i<4;i++){//初始化,就是第一行的情况,3个左边空格,1个*
                    console.log(k+j);//表示空格+*的组合
                    j+="**";        //表示*的变化,每次加两个
                    k=k.slice(1);   //表示左边空格的变化,依次减一,不知道这个slice自行百度
    }

    那么第二个三角形:他是由第一行是由左边0个空格+7个组成,最后一行是由3个空格+1个组成,那么规律就是左边空格就是依次递增一个,*依次递减两个。

    for(var i=0,j="*******",k="";i<4;i++){//初始化,就是第一行的情况,0个左边空格,7个*
                    console.log(k+j);//表示空格+*的组合
                    j=j.slice(2);    //表示*的变化,每次递减两个
                    k+=" ";         //表示左边空格的变化,依次递增一个
    }

    上面就是我这个菜鸟的一个解题思路。

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-11 13:13:59

    *****
      *****
       *****
        *****
         *****
    for(var a=0,b="*****";a<z;a++){
        console.log(" ".repeat(z-a) + b);
    }
         *****
        *****
       *****
      *****
     *****
    for(var a=0,b="*****";a<5;a++){
        console.log(" ".repeat(5-a) + b);
    }
        *
       ***
      *****
     *******
    for(var a=1,b="*";a<5;a++){
        console.log(" ".repeat(5-a) + b.repeat(a) + b.repeat(a-1 > 0 ? a-1 : 0));
    }
    *******
     *****
      ***
       *
    for(var a=4,b="*";a>0;a--){
        console.log(" ".repeat(4-a) + b.repeat(a) + b.repeat(a-1 > 0 ? a-1 : 0));
    }

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-11 13:13:59

    以下代码用了ES6,取名比较随意s就是space,空格的意思,n是要总次数,第二个参数是输出的图形
    第一个很简单,累加就好了

    //ES6
    function first(n,print = "*"){
      for(let i = 0; i < n ;i++)
         console.log(i > 0 ? print.repeat(i + 1) : print);
    }
    //非ES6
    function first(n,print){
      print = print || "*";
      var temp = "";
      for(var i = 0; i < n ; i++)
         console.log(temp += print);
    }

    第二个也很简单,依旧是累加,这次累加的是空格,如果是第一次进入循环就不打印空格

    //非es6
    function second(n,print){
        print = print || "*****"
        for(var i = 0,s = "";i < n;i++)
           console.log(i > 0?(s = " "  + s) + print : print);
    }

    关于倒过来,不用es6的话,写两个循环(也许可以不用写两个循环吧,但是我没想到),用了es6的话用repeat函数可以写的更好看点

    //es6
    function secondReverse(n,r = "*****"){
        for(let i = 0;i < n;i++)
           console.log(" ".repeat(n-i-1) + r );
    }
    //非es6
    function secondReverse(n,print){
        print = print || "*****";
        for(var i = n;i > 0;i--){
           var s = "";
           for(let j = 0 ; j < i ; j++)
              s+= " ";
           console.log(s + print);
        }
    }

    三角形

    //ES6
    function third(n,print = "*"){
      for(let i = 0 ; i < n ; i++ )
         console.log(" ".repeat(n-i-1) + (i > 0 ? print.repeat(2*(i+1)-1) : print))
    }
    //非Es6
    function third(n,print){
      print = print || "*";
      var temp = "";
      for(var i = 0 ; i < n ; i++ ){
         let s = "";
         for(var j = 1 ; j < n - i ;j++)
           s += " ";
         console.log(i > 0 ? s + (temp = temp + print + print) : s + (temp +=print));
      }
    }

    倒过来

    //ES6
    function thirdReverse(n,print = "*"){
      for(let i = n ; i > 0 ; i--)
         console.log(" ".repeat(n - i) + print.repeat(2*i-1))
    }
    //非ES6
    function thirdReverse(n,print){
      print = print || "*";
      var s = "";
      for(var i = 0 ; i < n ; i++ ){
         let temp = "*";
         s += " ";
         for(var j = 1 ; j < n - i ;j++)
           temp += print + print
         console.log(s + temp);
      }
    }

    회신하다
    0
  • 취소회신하다