11.22

1.16 嵌套循环应用
1.16.1 99乘法表
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>

let k =1;
for(let i=1;i<=9;i++){

for(let j=1;j<=i;j++){

//页面上打印
document.write(j+"*"+i+"="+(i*j)+" ");
}
//内循环结束 打印 "<br>"
document.write("<br/>")
}
</script>

</body>
</html>

1.16.2 百钱百鸡问题:
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
百钱[100]如果全部用来买公鸡:最少 0 最多 20
百钱[100]如果全部用来买母鸡:最少 0 最多 33
百钱[100]如果全部用来买小鸡:最少 0 最多 100

假如,我们买公鸡,买0只,请问这种情况下,母鸡买几只?小鸡买几只?
母鸡需要按照 0-33依次去匹配,是否和我们的条件一致。

用一个循环来控制公鸡的数量;从0开始,到20结束.
在公鸡确定情况下,母鸡应该0开始,到33结束.
公鸡和母鸡都确定的情况下,小鸡有100-公鸡-母鸡
计算价格 公鸡*5 + 母鸡*3 +小鸡*1/3 == 100 .


<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>

//用一个循环来控制公鸡的数量;从0开始,到20结束.
for(let i =0;i<=20;i++){

//母鸡数量
for(let j=0;j<=33;j++){

//公鸡数量为i 母鸡数量为j
let k = 100 - i - j;
//判断钱
if(15*i + j*9 + k == 300){
//满足 百钱
document.write("鸡翁:"+i+" , 鸡母: "+j+", 鸡雏: "+k+"<br/>");

}
}
}
</script>

</body>
</html>

 

类似的题目:
已知有三种人民币,分别为1元、2元、5元。求10元可以有多少种换成上述三种零钱的方法。


<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>
//已知有三种人民币,分别为1元、2元、5元。求10元可以有多少种换成上述三种零钱的方法。

//逻辑关系更容易懂 3层
//i表示5元的纸币的数量
for(let i=0;i<=2;i++){

//j2元的纸币的数量
for(let j=0;j<=5;j++){

//可以加一个循环 k 1元纸币数量
for(let k=0;k<=10;k++){
//输出
if(i*5 + j*2 +k == 10){
document.write("5元 "+i+" 张; "+" 2元 "+j+" 张; "+"1元 "+k+" 张<br/>")
}
}

}

}

document.write("<hr>")
//i表示5元的纸币的数量 ,最后一层循环省略了,但是多了一个判断. 2层循环
for(let i=0;i<=2;i++){

//j2元的纸币的数量
for(let j=0;j<=5;j++){

let k = 10-i*5 - j*2;
//输出
if(i*5 + j*2 +k == 10 && k>=0){
document.write("5元 "+i+" 张; "+" 2元 "+j+" 张; "+"1元 "+k+" 张<br/>")
}
}


}


</script>

</body>
</html>

1.16.3 鸡兔同笼:
<script>
//现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,聪明的小朋友,你能算出鸡和兔子各有多少只吗?

for(let i=1;i<=14;i++){

for(let j=1;j<=14;j++){

if(i*2 + j*4 == 38 && i+j == 14){
console.log(i+","+j);
}
}
}

console.log("******************");
for(let i=1;i<=14;i++){
let j=14-i;
if(i*2 + j*4 == 38){
console.log(i+","+j);
}

}

</script>

 


1.16.4 嵌套求和1:
实现 1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+4+5)

分析 :拆
1+2+…+n

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>

//最终结果
let s = 0;
//外侧再来一个循环,从1到5
for(let n =1; n<=5; n++){
//sum每个内循环累加得到和
let sum = 0;
for(let j =1;j<=n;j++){
sum = sum +j;
}
s += sum;//备注 s = s+sum
//console.log(sum)
}
console.log("结果是: "+s);

</script>

</body>
</html>


1.16.5 嵌套求和2:
实现1!+2!+3!+4!+5!; 5!=5*4*3*2*1

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>

//最终结果
let s = 0;
//外侧再来一个循环,从1到5
for(let n =1; n<=5; n++){
//sum每个内循环累加得到和
let sum = 1;
for(let j =1;j<=n;j++){
sum = sum * j;
}
s += sum;//备注 s = s+sum
//console.log(sum)
}
console.log("结果是: "+s);

</script>

</body>
</html>

 

1.16.6 代码优化:
for (let i = 0; i < 1000; i++)
for (let j = 0; j < 100; j++)
for (let k = 0; k < 10; k++)
testFunction (i, j, k);


<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>如果循环体内没有什么业务操作 ,也不做控制台输出,二者不太好比较</title>
</head>
<body>
<script>

//从二者比较情况来看,如果在循环次数不变的情况下,我们的循环次数小的放在外层,次数多的放在内层
//循环执行的效率会高一些. js,java
//getTime 返回 1970 年 1 月 1 日至今的毫秒数。
let start = new Date().getTime();
//1. 外循环执行 1000次
//2. 内循环 执行100次
for (let j = 0; j < 100; j++){
//3 内2循环执行了10次
for (let k = 0; k < 10; k++)
{
//计算...
let s = j + k; //100 * 10 = 1000次

console.log("");
}

}
let end = new Date().getTime();
console.log("end - start : "+(end - start)); //毫秒

console.log("***********************************");

start = new Date().getTime();

//1. 外循环执行 10次
for (let j = 0; j < 10; j++){
//3 内2循环执行了100次
for (let k = 0; k < 100; k++)
{
//计算...
let s = j + k; //100 * 10 = 1000次
console.log("");
}

}
end = new Date().getTime();
console.log("end - start : "+(end - start)); //毫秒


</script>
</body>
</html>

后面我们学完了数组之后,还会有一些循环和数组结合在一起操作的题目。


1.17 常见对象 :
数组 数学 字符串 时间 正则 等等

数组的创建方式:
//1- 最简单的方式,直接赋值 ->arr02 数组名
let arr02 = [1,2,3,4,5,6];
// 2- new Array(); 不指定长度和内容
// 3- new Array(size); 指定长度
// 4- new Array(element0, element1, ..., elementn); 指定元素数量,同时长度也就确定了

 

concat()
连接两个或更多的数组,并返回结果。
join()
把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop()
删除并返回数组的最后一个元素
push()
向数组的末尾添加一个或更多元素,并返回新的长度。
reverse()
颠倒数组中元素的顺序。
sort()
对数组的元素进行排序

posted @ 2021-11-22 16:55  左边第三只猫  阅读(40)  评论(0)    收藏  举报