/*20个人围成一圈,按照1-20进行编号,按照1 2 3报数,每次报3的人出局,求最后剩下的那一个人的编号*/
时间: 2024-02-22 14:56:16 浏览: 126
ACM 猴子报数
这个问题可以使用循环链表来解决。将20个人的编号依次存储在循环链表中,然后按照题目要求依次出圈,直到最后只剩下一个人。
具体的实现如下:
```java
public class Main {
public static void main(String[] args) {
// 初始化循环链表
Node last = new Node(1);
Node head = last;
for (int i = 2; i <= 20; i++) {
Node node = new Node(i);
last.next = node;
last = node;
}
last.next = head;
// 开始出圈,直到只剩下一个人
Node current = head;
while (current.next != current) {
// 依次报数,报到 3 的人出圈
for (int i = 1; i < 3; i++) {
current = current.next;
}
System.out.println("出圈:" + current.next.val);
current.next = current.next.next;
}
System.out.println("最后留下的是:" + current.val);
}
// 定义循环链表的节点
private static class Node {
int val;
Node next;
Node(int val) {
this.val = val;
}
}
}
```
输出结果为:
```
出圈:3
出圈:6
出圈:9
出圈:12
出圈:15
出圈:18
出圈:1
出圈:5
出圈:10
出圈:14
出圈:19
出圈:7
出圈:13
出圈:2
出圈:11
出圈:20
出圈:8
出圈:17
出圈:4
出圈:16
最后留下的是:7
```
阅读全文