十七、for循环语句算法题目

十七、for循环语句算法题目

之前的for循环,要求非常微观的看参数、遍历程序。

在做算法的时候,程序必须要宏观的看。

比如,题目:请在1~100之间寻找所有的既能够被3整除,又能够被5整除的数字

1
2
3
4
5
for(var i = 1 ; i < 100 ; i++){
if(i % 3 == 0 && i % 5 == 0){
console.log(i);
}
}

这种算法思想叫做穷举法。计算机最大的能力就是计算能力,计算机没有逻辑分析的能力(不能按3和5的公倍数来找)。

穷举法注意:

  • 注意开始数值、结束数值

  • 将全部的精力放在循环体书写上。真正的算法在循环体里面。

17.1 水仙花数

什么是水仙花数:

一个三位数,各个数位的立方和等于他自己的。比如153、371……

1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
// 穷举法
for(var i = 100 ; i <= 999 ; i++){
// 拆位
var baiwei = ~~(i / 100);
var shiwei = ~~(i / 10) % 10;
var gewei = i % 10;
// 看是否符合水仙花数的定义
if(Math.pow(baiwei, 3) + Math.pow(shiwei, 3) + Math.pow(gewei, 3) == i){
console.log(i + "是水仙花数");
}
}
</script>

U9mv5j.png

17.2 累加:计算1+2+3+……+100的和

累加器

1
2
3
4
5
6
7
8
9
<script>
// 累加器,这是一个变量,一开始是0
var sum = 0;
for(var i = 1 ; i <= 100 ; i++){
// sum在自己的基础上,自增i
sum += i;
}
console.log(sum); // 5050
</script>

17.3 循环的嵌套

1
2
3
4
5
6
7
<script>
for(var i = 3 ; i < 8 ; i++){
for(var j = 2 ; j < 5 ; j++){
console.log(i * j);
}
}
</script>

这个for循环的意思是,i会成为3 4 5 6 7 。在i是3 4 5 6 7 的情况下,j每次都会顺序成为2 3 4 。

他们会经过的配搭,依次为:

U9nMM6.png

17.4 输出1~20每个数字的约数

请实现控制台显示:

1能够被1整除

2能够被1整除、被2整除

3能够被1整除、被5整除

……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
// 外层循环遍历1 2 3 4 …… 20
for(var m = 1 ; m <= 20 ; m++){
// 内层去寻找m的约数
var str =""; //遍历一个数,出来后清空
for(var i = 1 ; i < m ; i++){
if(m % i == 0){
str += m + "能被" + i + "整除 "; //累加到一行
}
}
console.log(str); //遍历一个数,输出

}
</script>

U9ngWn.png

17.5 九九乘法表

1
2
3
4
5
6
7
8
9
10
11
<script>
// 外层循环遍历1 2 3 4 …… 9
for(var m = 1 ; m <= 9 ; m++){
var str ="";
for(var i = 1 ; i <= m ; i++){
str += m + "x" + i + "=" + (m * i) + "\t"; // "\t"代表一次缩进
}
console.log(str);
}

</script>

U9nfyV.png

17.6 三位数的约数和等于倒过来的数的约数和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<script>
for(var m = 100 ; m <= 200 ; m++){
var s1 = 0;
// 看m本身约数和
for(var i = 1 ; i < m ; i++){
if(m % i == 0){
s1 += i;
}
}
// 把m倒过来
var baiwei = ~~(m / 100);
var shiwei = ~~(m / 10) % 10;
var gewei = m % 10;

var d =gewei * 100 + shiwei * 10 + baiwei;
var s2 = 0;
// 倒过来的约数和
for(var j = 1 ; j < d ; j++ ){
if(d % j == 0){
s2 += j;
}
}
// 看两个和是否相等
if(s1 == s2){
console.log(m)
}
}
</script>

U9nxeO.png

17.7 完美数

约数(除原数外)的和等于它本身。

比如6, 1+2+3=6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
for(i = 1 ; i <= 1000 ; i++){
// 约数和
var s = 0;
// 找所有的约数(不包含本身)的和
for(j = 1 ; j < i ; j++){
if(i % j == 0){
s += j;
}
}
// 如果约数和等于原数
if(i == s){
console.log(i);
}
}
</script>

U9uKYj.png

17.8 鸡兔同笼:穷举试验

鸡兔同笼:94个腿。35个头。问鸡兔数量

算法思路:穷举试验

1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
for(var chickenCount = 0 ; chickenCount <= 35 ; chickenCount++){
for(var rabbitCount = 0 ; rabbitCount <= 35 ; rabbitCount++){
if(
chickenCount * 2 + rabbitCount * 4 == 94
&&
chickenCount + rabbitCount == 35
){
console.log("鸡" + chickenCount + ", 兔" + rabbitCount)
}
}
}
</script>

U91VIO.png

17.9 “金字塔”

1
2
3
4
5
6
7
<script>
for(var i = 1 ; i <= 5 ; i++){
var str = " ".repeat(5 - i); // ””.repear(n) 重复引号内的内容n次
str += "*".repeat(i * 2 - 1);
console.log(str);
}
</script>

U913eP.png

17.10 1~100之间的质数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
for(var i = 2 ; i <= 100 ; i++){
// 这个数字的约数的个数,每个数字计数器重新清零
var count = 0;
// 从1开始到这个数字去除它,如果能整除,计数器加1
for(var j = 1 ; j <= i ; j++){
if(i % j == 0){
count++;
}
}

// 检查count是不是2
if(count == 2){
console.log(i);
}
}
</script>

U91NWQ.png

点击查看

本文标题:十七、for循环语句算法题目

文章作者:Mango

发布时间:2020年07月08日 - 21:50:17

最后更新:2020年07月08日 - 22:35:39

原始链接:https://mango185.github.io/post/6889432a.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------