java有n个人围成一圈
时间: 2024-01-23 08:48:19 浏览: 71
N个人围圈数数的Java算法
好的,这道题目可以使用经典的约瑟夫问题来解决。具体步骤如下:
1. 创建一个长度为n的数组people,存储n个人的编号,初始值为1~n。
2. 创建一个变量count,表示当前还剩下多少个人。
3. 创建一个变量index,表示当前报数到哪个人了(初始值为0)。
4. 创建一个while循环,当count>1时继续执行循环。
5. 在循环中,每次将index加1,如果index等于n,则将其重置为0。
6. 如果people[index]不等于0,表示这个人还没有被淘汰,则将count减1。
7. 如果此时count等于1,表示只有一个人还没有被淘汰,循环结束。
8. 否则,将people[index]设为0,表示这个人已经被淘汰。
9. 最后,循环结束后,people数组中剩下的那个人就是胜利者的编号。
下面是Java代码实现:
```
public static int josephus(int n) {
int[] people = new int[n];
for (int i = 0; i < n; i++) {
people[i] = i + 1;
}
int count = n;
int index = -1;
while (count > 1) {
index++;
if (index == n) {
index = 0;
}
if (people[index] != 0) {
count--;
}
if (count == 1) {
break;
}
people[index] = 0;
}
for (int i = 0; i < n; i++) {
if (people[i] != 0) {
return people[i];
}
}
return -1;
}
```
然后在主函数中调用josephus方法即可。
阅读全文