约瑟夫环问题:
假设有n个人围成一圈,顺序排号,从第一个人开始报数,(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位。
代码实现:
public class TextDemo1 {
//假设有n个人参与游戏
public static int function(int n) {
int[] array = new int[n];
for (int i = 0; i < array.length; i++) {
array[i] = 1;//依然在队列中的设置为1
}
int a = 0;//a为报数的数字
int num = n;//num为当前剩余人数
while (num >1) {
for (int i = 0; i < array.length; i++) {
if (array[i] == 1) {
a++;
if (a == 3) {//当这个人报数为3的时候推出队列
array[i] = 0;//退出的人设置为0
num--;
a = 0;
}
}
}
}
for (int i = 0; i < array.length; i++) {
if (array[i] == 1) {
return i+1;//最终留下来的人
}
}
return -1;
}
public static void main(String[] args) {
System.out.println(function(11));
}
}
最终留下来的人是第七个,也就是G。