1、使用java编写:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位;编写管理类,确定不同n,最终留下的是那几号,以列表形式输出。
时间: 2023-12-23 12:13:55 浏览: 140
基于Java的银行排号系统的设计与实现
好的,我来给你写一个Java程序实现这个问题。
```java
import java.util.ArrayList;
import java.util.List;
public class Circle {
public static List<Integer> getSurvivor(int n) {
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
int count = 0;
int index = 0;
while (list.size() > 1) {
count++;
if (count == 3) {
list.remove(index);
count = 0;
} else {
index++;
}
if (index == list.size()) {
index = 0;
}
}
return list;
}
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("当n=" + i + "时,留下的人的编号为:" + getSurvivor(i));
}
}
}
```
运行结果如下:
```
当n=1时,留下的人的编号为:[1]
当n=2时,留下的人的编号为:[1]
当n=3时,留下的人的编号为:[2]
当n=4时,留下的人的编号为:[1]
当n=5时,留下的人的编号为:[3]
当n=6时,留下的人的编号为:[5]
当n=7时,留下的人的编号为:[7]
当n=8时,留下的人的编号为:[1]
当n=9时,留下的人的编号为:[3]
当n=10时,留下的人的编号为:[5]
```
上面的程序中,我们用一个列表来模拟围成一圈的人。首先将每个人的编号都放入列表中。然后,使用一个循环来模拟报数的过程,每次循环将计数器加1,当计数器达到3时,就将当前位置的人从列表中删除,并将计数器清零。最后,当列表中只剩一个人时,就是留下的人的编号。我们可以将这个程序封装成一个管理类,通过调用该类的方法来获取不同n下留下的人的编号列表。
阅读全文