罗塞塔代码-100门

57 阅读1分钟
function getFinalOpenedDoors(numDoors) {
    let doors = Array(numDoors + 1).fill(0); // 0 = 关闭, 1 = 打开

    // 遍历100个人
    for (let i = 1; i <= numDoors; i++) {
        for (let k = i; k <= numDoors; k += i) { // 翻转编号是 i 倍数的门
            doors[k] = 1 - doors[k]; // 0 变 1,1 变 0
        }
    }

    // 获取所有打开的门的索引(编号)
    return doors
        .map((state, index) => (state === 1 ? index : -1))
        .filter(index => index > 0); // 过滤掉未打开的门
}

// 测试
console.log(getFinalOpenedDoors(100));