循环语句 for
循环语句的一种
语法:
for (初始变量; 条件判断; 修改初始值) { 代码段 }
原始形态:
初始变量
for (条件判断) {
修改初始值
}
代码
console.log('start')
for (var n = 1; n <= 20; n++) {
// 在这个 {} 内只需要书写重复执行的代码即可, 不需要考虑修改初始值的问题
console.log('我执行了', n)
}
console.log('end')
练习
练习1:寻找三次自幂数(水仙花数)
三次自幂数:
(1) 保证是一个 三位数
(2) 数字每一位的 三次幂之和 和 这个数字 相等
// 步骤1: 拿到 所有三位数
for (var i = 100; i <= 999; i++) {
// // 步骤2: 提取出每一位的数字
// // 2-1. 提取百位数字
var a = parseInt(i / 100)
// // 2-2. 提取十位数字
var b = parseInt(i % 100 / 10)
// // 2-3. 提取各位数字
var c = i % 10
// // 步骤3: 开始判断
// // 取幂运算符 **
// // 底数 ** 指数
if (a ** 3 + b ** 3 + c ** 3 === i) console.log(i + ' 是三次自幂数')
}
练习2:在页面上输出1000 ~ 2000 之间的所有闰年,四个一换行
// 步骤1: 拿到 1000 ~ 2000 之间 所有的闰年在页面上输出
// 步骤2: 准备一个计数器, 每输出一个计数器++
// 准备一个计数器变量
var total = 0
// // 书写步长的时候 +4
for (var i = 1000; i <= 2000; i += 4) {
// // 判断是否是闰年
// // 所有的 i 都必然是 4 的倍数
if (i % 100 !== 0 || i % 400 === 0) {
// // 页面输出
document.write(i + ' ')
// // 每输入一个, 计数器++
total++
// // 当计数器到达 4 8 12 ... 需要输出一个换行
total % 4 === 0 && document.write('<br>')
}
}
console.log(total)
练习3:求最大公约数
//方案1
var max = 18
var min = 12
// 我只要提前准备一个变量, 接受
var res
// 循环
for (var i = 1; i <= min; i++) {
// // 开始判断
if (max % i === 0 && min % i === 0) {
console.log(i)
// // 找到一个公约数赋值一次
res = i
// }
// }
//方案2
// 倒着循环
for (var i = min; i >= 1; i--) {
console.log(i)
// 开始判断
if (max % i === 0 && min % i === 0) {
res = i
// 因为是从大向小查找, 找到的第一个公约数就是最大公约数
// 只要找到一个就可以直接结束循环了
break
}
}
console.log(res)
最大公约数, 辗转相除法
逻辑: 两个数字相除, 如果可以整除, 相对小的数字就是最大公约数
(1) 当不能整除的时候交换
(2) 把小的数字变成大的, 用原先两个数字的余数代替小的数字
(3) 重复以上步骤
示例: 18 和 12
max = 18, min = 12
1. max % min 不能整除
(1)进行替换
(2) max = 12
(3) min = 6
2. max % min 能整除
此时 6 就是 18 和 12 的最大公约数
示例: 27 和 19
max = 27, min = 19
1. max % min 不能整除
(1) max = 19
(2) min = 8
2. max % min 不能整除
(1) max = 8
(2) min = 3
3. max % min 不能整除
(1) max = 3
(2) min = 2
4. max % min 不能整除
(1) max = 2
(2) min = 1
5. max % min 整除
1 就是 27 和 19 的最大公约数
代码:
1. 当 max 和 min 取余不为 0 的时候
执行一段代码(重复执行)
2. 当 max 和 min 取余为 0 的时候
结束循环
var max = 27
var min = 19
// // 开启循环
while (max % min !== 0) {
// // 执行一段代码
// // max 和 min 的重新赋值
// // 准备临时变量保存两个数字的余数
var tmp = max % min
// // 把 min 的值赋值给 max
max = min
// // 把 临时变量 的值赋值给 min
min = tmp
}
// // 代码来到这里, 说明 max % min === 0 为 true
console.log(min + ' 就是最大公约数')
最小公倍数
分析: 10 和 15 的最小公倍数
1. 公倍数 30 60 90 120 150 …
2. 最小公倍数 30
3. 最小公倍数取值范围:
4. 最小就是 相对大的那个数字
5. 最大就是 两数乘积
6. 步长就是 相对大的那个数字
var min = 10
var max = 15
// 准备一个变量接受结果
var res = 0
for (var i = max; i <= min * max; i += max) {
// 判断是不是公倍数就可以了
// 因为循环的步长就是 max, 所以这里得到的所有的 i 都是 max 的倍数
// 只要这个数字同时还是 min 的倍数, 那么就是公倍数了
if (i % min === 0) {
res = i
// 又因为我们是从小到大循环的, 那么找到的第一个就是最小公倍数
break
}
}
console.log(min + ' 和 '+ max + ' 的最小公倍数就是 : ' + res)