Pintia题解—— 7-5猴子选大王

7-5 猴子选大王

原题:

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数N(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

.

解题思路:

解题思路:

  1. 首先,我们需要读取输入的猴子数量 N。

  2. 然后,创建一个数组 monkeys 存储猴子编号,初始化为从 1 到 N 的连续整数。

  3. 创建一个指针 index,初始值为 0,用来表示当前报数的猴子在数组中的位置。

  4. 在循环中,每次找到要删除的猴子位置(即 index+2),并将其从数组中删除。如果删除位置大于数组长度,需要取模操作以循环遍历数组。

  5. 循环结束后,数组中只剩下一只猴子,输出其编号。

.

JavaScript(node)代码:

const r = require("readline");
const rl = r.createInterface({
    
    
    input: process.stdin
});

let buf = []
rl.on('line', (input) => {
    
    
    buf.push(input);
})

rl.on('close', () => {
    
    
    const arr = [...Array(parseInt(buf[0])).keys()].map(x => x + 1);
    let index = 0;
    while (arr.length > 1) {
    
    
        index = (index + 2) % arr.length; // 找到要删除的猴子索引位置
        arr.splice(index, 1); // 删除猴子
    }
    console.log(arr[0]);

});

.

复杂度分析:

时间复杂度:O(2n)
空间复杂度:O(n)

猜你喜欢

转载自blog.csdn.net/Mredust/article/details/132914496