猴子选大王,要求一群猴子排成一圈, 按“ 1, 2, ……, n” 依次编号。 然后从第1只开始数, 数到第m只, 把它踢出圈, 其后的猴子再从1开始数, 数到第m只, 再把它踢出去……, 如此不停的

// 猴子选大王
        //     -
        //     要求一群猴子排成一圈, 按“ 1, 2, ……, n” 依次编号。 然后从第1只开始数, 数到第m只, 把它踢出圈, 其后的猴子再从1开始数, 数到第m只, 再把它踢出去……, 如此不停的进行下去, 直到最后只剩下一只猴子为止, 那只猴子就是我们要找的大王。 -
        //     假设n( 猴子总数): 8、 m( 踢出圈的): 3 -
        //     第一圈: 踢出的猴子编号为3、 6, 位置编号为3、 6。 -
        //     第二圈: 踢出的猴子编号为1、 5, 位置编号为9、 12。 -
        //     第三圈: 踢出的猴子编号为2、 8, 位置编号为15、 18。 -
        //     第四圈: 无。 -
        //     第五圈: 踢出的猴子编号为4, 位置编号为21。 -
        //     得出猴王编号: 7。
        //     -
        //     通过prompt() 接收用户传递的猴子总数n和踢出的第m只猴子。
        //     -
        //     利用数组保存所有猴子的编号( 1~n)。
        //     -
        //     设置一个变量i, 记录每次参与游戏( 报数) 的猴子位置。
        //     -
        //     通过while循环, 只要猴子数组内元素个数大于1, 就继续循环。
        //     -
        //     在循环中判断当前猴子的位置i与m求余是否为0, 若为零, 删除该数组元素。

        // 1, 2, 3, 4, 5, 6, 7, 8
        /* 2, 3, 4, 5, 6, 7, 8, 1
        3, 4, 5, 6, 7, 8, 2, 1
        4, 5, 6, 7, 8, 2, 1 */
        var monkey_sum = prompt('猴子的总数:'),
            monkey_loc = prompt('踢出猴子的位置:'),
            monkey_arr = [];
        // 用数组保存猴子的编号
        for (let i = 0; i < monkey_sum; i++) {
            monkey_arr.push(i + 1);
        }
        let monkey_num = 0;
        // 若数组内长度大于1, 就一直循环
        while (monkey_arr.length > 1) {
            monkey_num++;
            // shift() 方法移除数组的第一项
            let monkey_head = monkey_arr.shift();
            // 判断当前猴子的位置i与m求余是否为0, 若为零, 删除该数组元素
            if (monkey_num % m != 0) {
                // 将移除的第一项添加到数组的后面
                monkey_arr.push(monkey_head);
            }
        }
        alert('猴王的编号为:' + monkey_arr[0]);

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值