经典面试题---带锁的门

  在走廊上有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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值