问题描述:一圈人(n个)围着一起报数,报到x的淘汰,规定最后场上剩下的y人为胜利者。
/**
* 约瑟夫环,用数组方法解决
* @param personNumber 总人数
* @param number 报到就淘汰的数字
* @param survive 最后需要留的人数
*/
public static void josephRing(int personNumber,int number,int survive) {
int[] array = new int[personNumber]; //先把人放到数组里面,数组下标就是编号
int m = 0; //计数
int n = personNumber; //报到number数的人数
while(n > survive) {
for (int i = 0; i < array.length; i++) {
if (array[i] == 0) {
m++;
if (m == number) {
m = 0; //如果数到number数字,该人出局,重新从1开始数数
array[i] = 1; //将报了number数的人标记为1
n--; //报一个number少一个人
System.out.println(i + 1 + "号淘汰");
}
}
}
}
for(int i = 0;i < array.length;i++) {
if(array[i] == 0) {
System.out.println(i+1+"号成功");
}
}
}