循环的嵌套
为什么有循环的嵌套?
因为一件事情的内容需要重复做,而且这个事情要反复做。
什么时候用循环的嵌套?
一般有行数有列数并且两者之间存在关系的时候用循环的嵌套。
比如直角三角形的输出:
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。