有500个人围城一个圈,依次报数,每数到3的倍数的人离开圈,数完一圈后继续从1开始数,直到圈中剩下最后一个人,求剩下的人原来在圈中的位置(约瑟夫环问题)
public static void main(String[] args) {
boolean[] people = new boolean[500];
for (int i = 0; i < people.length; i++) {
people[i] = true;
}
int xiaBiao = 0;
int jiShu = 0;
int renShu = 500;
while (renShu > 1) {
if (people[xiaBiao]) {
jiShu++;
}
if (jiShu == 3) {
people[xiaBiao] = false;
jiShu = 0;
renShu--;
}
if (xiaBiao == people.length - 1) {
xiaBiao = 0;
} else xiaBiao++;
}
for (int i = 0; i < people.length; i++) {
if (people[i])
System.out.println("最后一人在圈中的位置为:" + (i + 1));
}
}