思路:
- 剩余最后一人时游戏停止
- 进入游戏, 从0开始把下标往下移, 每移动到下一个下标都要进行提前判断
- 数组的当前下标所对应的值不为 null, 就往下报数
- 如果报数为3时, 就把数组的当前下标所对应的值删除, 相当于踢出局, 并且报数重新开始, 记录离开的人数
- 当下标移动完总人数时, 将下标归 0, 继续循环
[1, 2, 3, 4, 5, 6]
[1, 2, 空白, 4, 5, 空白]
function gameInit(partCount, callCount) {
const childArr = []
for (let i = 1; i <= partCount; i++) {
childArr.push(i)
}
let exitCount = 0
let current = 0
let roll = 0
while(partCount > exitCount + 1) {
if (childArr[current]) {
roll++
}
if (roll === callCount) {
delete childArr[current]
exitCount++
roll = 0
}
current++
if (current === partCount) {
current = 0
}
}
for (let i = 0; i <= partCount; i++) {
if (childArr[i]) {
return childArr[i]
}
}
}
console.log(gameInit(30, 3))