首先让我先介绍一下约瑟夫环,哈哈~名字怪怪的,其实我也不知道.但是*度爸爸知道啊.~~~
不追究历史,我们只讨论算法,(历史太邪恶!),算法要求大致意思如下:
n个人围成一圈,从第1个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。
我实现的是:500个人围一圈,从第一个人开始报数,报到3的人出圈.
链表实现形式:
import java.util.ArrayList;
import java.util.List;public class Test {
public static void yuesefu(int n, int m, int k) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < n + 1; i++) {
list.add(i);
}
int i = k - 1;
while (list.size() > 0) {
i = (i + m - 1) % list.size();
System.out.print(list.get(i) + ",");
list.remove(i);
}
}public static void main(String[] args) {
yuesefu(500,3,1);
}}
数组实现形式:
public static void main(String[] args) {
int[] a = new int[500];
int b = 0;
int c = 0;while (b != 499) {
for (int i = 0; i < 500; i++) {
if (c == 3 && a[i] == 0) {
c = 1;
a[i] = 1;
b++;
}
if (a[i] == 0)
c++;}
}for (int i = 0; i < 500; i++)
if (a[i] == 0) {
System.out.print(i + " ");
}
}