12人が元の数を残す最後の人を見つけるために、先頭から順に、その後、次の数、出口倍の数に応じて時計回りに開始番号1から、人7の数を1-12からシリアル番号が続く円を形成します。
public static void joseph(int[] array,int n) {
for (int i = 0; i < array.length; i++) {
array[i] = i+1;
}
// 计数器
int counter = 0;
// 剩余人数
int leftCount = array.length;
// 索引
int index = 0;
while (leftCount > 1) {
if (array[index]>0) {
counter++;
if (counter == n) {
counter = 0;
array[index] = 0;
leftCount--;
}
}
index++;
if (index == array.length) {
index = 0;
}
}
for (int i = 0; i < array.length; i++) {
if (array[i]>0) {
System.out.println("剩余人员的位置是" + (i + 1));
}
}
}
public static void main(String[] args) {
int [] array = new int[12];
joseph(array,7);
}