/**
* 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
*
* @param n个人
* @return 最后留下的号码
*/
public static int getPerson(int n) {
int people[] = new int[100];
// 统计剩余总人数
int count = people.length;
// 统计移除的人数
int removePeople = 0;
// 记录报数人所报数字
int index = 0;
for (int i = 0; i < people.length; i++) {
people[i] = i + 1;
}
// 如果总人数大于1继续报数
while (count > 1) {
index = 0;
for (int i = 0; i < count; i++) {
index++;
if (index == 3) {
people[i] = people[i + 1];
count--;
break;
}
if (i + 1 == count) {
i = -1;
}
}
}
return people[0];
} |