console - JavaScript中,使用for循环输出如下图形(等腰三角形,和平行四边形)?原理是啥?
PHP中文网
PHP中文网 2017-04-11 13:11:59
0
5
995

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

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

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

输出为:

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

倘若我要输出:

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

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

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

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

PHP中文网
PHP中文网

认证高级PHP讲师

Antworte allen(5)
伊谢尔伦

这也是我刚接触编程的时候做过的,刚开始的时候也是没想通。其实多想想就可以了。他的解法很多。
说一个我的解法吧。首先用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+=" ";         //表示左边空格的变化,依次递增一个
}

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

洪涛

以下代码用了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);
  }
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!