Java:写有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3 报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。
时间: 2023-12-23 17:55:26 浏览: 122
这道题可以使用环形链表来模拟。首先创建一个长度为 n 的环形链表,每个节点表示一个人,节点的值表示这个人的编号。然后从第一个人开始,依次报数,每报到 3 的人就从链表中删除。直到链表中只剩下一个节点为止,这个节点所代表的人就是最后留下的人。
以下是 Java 代码实现:
```java
public class LastRemaining {
public static void main(String[] args) {
int n = 10; // 总人数
int m = 3; // 报数上限
System.out.println("最后留下的人的编号是:" + lastRemaining(n, m));
}
public static int lastRemaining(int n, int m) {
// 创建链表
Node head = new Node(1);
Node cur = head;
for (int i = 2; i <= n; i++) {
cur.next = new Node(i);
cur = cur.next;
}
cur.next = head;
// 依次报数,每报到 m 的人就从链表中删除
while (cur.next != cur) {
for (int i = 1; i < m; i++) {
cur = cur.next;
}
cur.next = cur.next.next;
}
// 返回最后留下的人的编号
return cur.val;
}
// 链表节点类
private static class Node {
int val;
Node next;
public Node(int val) {
this.val = val;
}
}
}
```
输出结果为:
```
最后留下的人的编号是:4
```
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)