约瑟夫问题
package sort;
public class Joseph {
public void select() {
// boolean类型数组,数组长度与总人数相同
boolean[] flag = new boolean[100];
for (int i = 0; i < flag.length; i++) {
flag[i] = true;
}
int number = 100;// 总人数
int index = 0;// 数组下标
int bao = 0;// 1,2,3循环报数
// 总人数不为1循环继续报数
while (number > 1) {
// 数组元素为true执行bao加一
if (flag[index]) {
bao++;
// 报数为3下标为false
if (bao == 3) {
flag[index] = false;
// 人数减一
number--;
// 重新报数1,2,3
bao = 1;
}
}
index++;
if (index == flag.length) {
index = 0;
}
}
// 打印数组
for (int i = 0; i < flag.length; i++) {
if (flag[i]) {
// 输出最后一人的号码为数组下标加一
System.out.println("最后一人的号码为" + (i + 1));
}
}
}
public static void main(String[] args) {
new Joseph().select();
}
}