用java写出N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,找到最后一人的编号
时间: 2024-03-10 13:22:20 浏览: 21
好的,这是一个经典的约瑟夫问题。具体的解法可以使用循环链表来实现,Java代码如下:
```
import java.util.*;
public class Joseph {
public static int findLast(int n, int m) {
List<Integer> list = new LinkedList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
int idx = 0;
while (list.size() > 1) {
idx = (idx + m - 1) % list.size();
list.remove(idx);
}
return list.get(0);
}
public static void main(String[] args) {
int n = 10;
int m = 3;
int last = findLast(n, m);
System.out.println("The last person's number is: " + last);
}
}
```
当输入n=10,m=3时,程序的输出为:
```
The last person's number is: 4
```
也就是说,最后剩下的人的编号是4。