在走廊上有n个带锁的门,从1到n依次编号。最初所有的门都是关着的。我们从门前经过n次,每次都从1号门开始。在第i次经过时(i = 1,2,..., n)我们改变不是i的整数倍号锁的状态;如果门是关的,就打开它;如果门是打开的,就关上它,且每次只走到n-i(包含)号门的位置。在最后一次经过后,哪些门是打开的,哪些门是关上的?有多少打开的门?请用原生JS写代码实现。
const n = 100
const arr = []
// 初始化门的状态
for (let i = 1; i <= n; i++) {
arr[i] = false
}
// 外层循环控制走过的趟数
for (let i = 1; i <= n; i++) {
// 内层循环控制的是每趟走到第几个门
for (let j = 1; j <= n - i + 1; j++) {
if (j % i !== 0) {
arr[j] = !arr[j]
}
}
}
arr.forEach((item, index) => {
console.log(`第${index}扇门是${item ? '开' : '关'}着的`)
})
console.log('开门的数量:', arr.filter((item) => item).length)