有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出 / 圈子,问最后留下的是原来第几号的那位。 用js实现
时间: 2023-12-23 22:23:38 浏览: 62
Python使用列表完成程序的编写:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡是报到m的人退出圈子,问最后留下的是原来第几号的人。
5星 · 资源好评率100%
好的,这是一个经典的约瑟夫问题,可以使用循环链表来解决。以下是用 JavaScript 实现的代码:
```javascript
function josephus(n) {
// 创建循环链表
let head = { val: 1 };
let prev = head;
for (let i = 2; i <= n; i++) {
let node = { val: i };
prev.next = node;
prev = node;
}
prev.next = head;
// 开始报数
let count = 0;
let cur = head;
let prev2 = prev;
while (cur.next !== cur) {
count++;
if (count === 3) {
// 删除节点
prev2.next = cur.next;
cur = cur.next;
count = 0;
} else {
prev2 = cur;
cur = cur.next;
}
}
return cur.val;
}
console.log(josephus(10)); // 输出 4
```
在这个实现中,我们先创建了一个循环链表,然后从头节点开始遍历,每次数到 3 就删除当前节点,直到只剩下一个节点为止,这个节点即为最后留下的节点。
阅读全文