js约瑟夫环

约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被淘汰,最后剩下一个。

function circle(N, M) {
            var arr = []
            //N为总人数,M为把报数为多少,其中一个小于1的话会退出游戏
            if (N < 1 || M < 1) {
                return
            }
            //将人数存储在数组
            for (i = 1; i <= N; i++) {
                arr.push(i)
            }
            var index = 0;
            //退出条件为数组内只剩余1人
            while (arr.length > 1) {
                //索引是从0开始所以要减1
                //设置索引为当前数值加上报数-1后再除以数组的长度
                index = (index + M - 1) % arr.length;
                console.log(`淘汰${arr[index]}`)
                //删除被选中的人
                arr.splice(index, 1)
                console.log(`剩余${arr}`)
            }
        }
        circle(10, 0)

 

你可能感兴趣的:(前端面试题,JavaScript)