JS-击鼓传花

220 阅读1分钟
// 猴子找大王游戏
// 有一群猴子排成一圈,按1、2、3、…、n依次编号,然后从第1只开始数,数到第m只,则把它踢出圈,然后从它后面再开始数,当再次数到第m只,继续把它踢出去,以此类推,直到只剩下一只猴子为止,那只猴子就叫作大王。要求编程模拟此过程,输入m和n,输出最后那个大王的编号
// n表示猴子个数,m表示踢出位置

        function findMonkeyKing(n, m) {
            //因为猴子都是有编号的,所以先把所有的猴子放在一个数组中
            //遍历n次 得到一个新数组
            var arr = [];
            for (var i = 1; i <= n; i++) {
                arr.push(i);
            }

            //只要arr的长度大于1,就还要踢猴子
            while (arr.length > 1) {
                // 遍历数组, 如果通过的猴子 就把这个猴子放在数组的末端,如果刚好到第m次 则不再移动这个值,而是把这个值删除
                for (var i = 0; i < m - 1; i++) {
                    //把数组的第一个值放在数组的末端
                    arr.push(arr.shift());
                }
                //到底第m个猴子的时候,把这个猴子删除掉
                arr.shift();
            }

            return arr[0];
        }
        var re = findMonkeyKing(100, 8);
        console.log(re);