循环的嵌套

循环的嵌套

为什么有循环的嵌套?

因为一件事情的内容需要重复做,而且这个事情要反复做。

什么时候用循环的嵌套?

一般有行数有列数并且两者之间存在关系的时候用循环的嵌套。

比如直角三角形的输出:

for(var i = 1;i <= 10;i++){
    for(var j = 1;j < i; j++){
        document.write("*");
    }
    document.write("</br>");
}

比如等腰三角形:

var num = 10;
//    每一行的空格数为总行数减去当前是第几行
//    每一行的星星个数为当前行*2-1
//    循环条件行数小于等于10
    
for(var i = 1;i <= num;i++){
        for(var j = num - i;j > 0;j--){
            document.write("_");
        }
        for(var k = 1;k <= i*2-1;k++){
            document.write("*");
        }
        document.write("</br>");
    }

另一种方式输出由*组成的等腰三角形

行号

空格

*

1

row-1

1

2

row-2

3

3

row-3

5

i

row-i

2i-1

var row = Number(prompt("请输入行数:"));
for(var i = 1;i <= row;i++){
    for(var j = 1;j <= row - i; j++){//输出row-i个空格
        
document.write("_");
    }
    for(var k = 1;k <= 2 * i - 1;k++){//输出2i-1*
        
document.write("*");
    }
    document.write("</br>");//输出换行
}

 

输出成菱形:


第一种方案:

for(var i = 1;i <= 5;i++){
    for(var j = 1;j <= 5 - i; j++){//输出row-i个空格
        
document.write("_");
    }
    for(var k = 1;k <= 2 * i - 1;k++){//输出2i-1*
        
document.write("*");
    }
    document.write("</br>");//输出换行
}
for(var i = 4;i >= 1;i--){
    for(var j = 6 - i;j > 1; j--){//输出row-i个空格
        
document.write("_");
    }
    for(var k = 1;k <= 2 * i - 1;k++){//输出2i-1*
        
document.write("*");
    }
    document.write("</br>");//输出换行
}

 

第二种方案:

var row = Number(prompt("请输入行数:"));
    for(var i = 1;i <= 2 * row -1;i++){
        var blanks = Math.abs(row - i);//空格的个
        
var stars = 2 * row - 1 -2 * Math.abs(i - row);//第三种方案星号个数

        for(var j = 1;j <= blanks;j++){
            document.write("_");
        }
        for(var j = 1;j <= stars;j++){
            document.write("*");
        }
        document.write("</br>");
    }


第三种方案:

var row = Number(prompt("请输入行数:"));
for(var i = 1;i <= 2 * row -1;i++){
    var blanks = Math.abs(row - i);//空格的个数
    
var stars = 2 * row - 1 -2 * blanks;//第三种方案星号个数
    
for(var j = 1;j <= blanks;j++){
        document.write("_");
    }
    for(var j = 1;j <= stars;j++){
        document.write("*");
    }
    document.write("</br>");
}

第一种方案是最容易的一种;

第二种方案是通过理论上的推到出结果,比较复杂且不好理解;

第三种方案更加容易理解。就是把它想成一个矩形来理解,*号两边空格数量一样,那么*就等与2*row-1-两个空格blanks。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值