js围成一圈,123报数。报到3的退出。最后剩下的输出
时间: 2024-04-09 17:28:52 浏览: 11
这是一个经典的约瑟夫问题,可以使用循环链表来解决。以下是一个用 JavaScript 实现的代码示例:
```javascript
function Node(value) {
this.value = value;
this.next = null;
}
function josephus(n, m) {
if (n < 1 || m < 1) {
return -1;
}
// 创建循环链表
var head = new Node(1);
var prev = head;
for (var i = 2; i <= n; i++) {
var newNode = new Node(i);
prev.next = newNode;
prev = newNode;
}
prev.next = head; // 将链表首尾相连
// 开始报数并删除节点
var current = head;
while (current.next !== current) {
for (var count = 1; count < m - 1; count++) {
current = current.next;
}
current.next = current.next.next; // 删除节点
current = current.next; // 更新当前节点
}
return current.value; // 返回最后剩下的节点值
}
var n = 10; // 总人数
var m = 3; // 报数到 m 的人退出
var lastPerson = josephus(n, m);
console.log("最后剩下的人是:" + lastPerson);
```
运行上述代码,将输出最后剩下的人的编号。例如,当总人数为10,报数到3的人退出时,最后剩下的人的编号为4。