Java实现n个人围成一圈顺序排号
以下是一个Java程序,实现n个人围成一圈顺序排号,并可以模拟约瑟夫问题(即从某个指定的人开始报数,数到k的那个人出列,然后从下一个人重新开始报数,直到所有人都出列)。

import java.util.ArrayList;
import java.util.List;
public CircleNumbering {
public static void main(String[] args) {
int n = 7; // 总人数
int k = 3; // 报数到k的人出列
int start = 0; // 从第0个人开始(编号从0开始)
List<Integer> people = new ArrayList<>();
for (int i = 0; i < n; i++) {
people.add(i + 1); // 编号从1到n
}
System.out.println("初始围圈顺序: " + people);
int index = start;
while (!people.isEmpty()) {
// 计算要出列的人的索引
index = (index + k - 1) % people.size();
System.out.println("出列的人: " + people.remove(index));
}
}
}
程序说明
- 初始化:创建一个包含n个元素的列表,编号从1到n。
- 模拟过程:
- 从指定的人开始(start参数)
- 每次数k个人,第k个人出列
- 从下一个人重新开始报数
- 出列顺序:程序会输出每个人出列的顺序
示例输出
当n=7,k=3,start=0时,输出可能如下:
初始围圈顺序: [1, 2, 3, 4, 5, 6, 7]
出列的人: 3
出列的人: 6
出列的人: 2
出列的人: 7
出列的人: 5
出列的人: 1
出列的人: 4
变体实现
如果你想更简单地实现只是围成一圈排号而不模拟出列过程,可以这样:
public class SimpleCircleNumbering {
public static void main(String[] args) {
int n = 7;
System.out.println("围圈顺序编号:");
for (int i = 0; i < n; i++) {
System.out.print((i % n) + 1 + " ");
}
}
}
这个版本会简单地输出1到n的编号循环排列。
你可以根据具体需求选择合适的实现方式。


