介绍:一群人围成一个圈,从头开始数数,输到3就退出。后面接着从1开始数,一直循环着转下去,直到台上只有一个人,那个人就是胜利者。
问题:假如500个人做这个游戏,第一个数数的人序号为1,那么序号为几的人是胜利者?
public class Count3Quit{
public static void main(String[] args){
boolean[] arr=new boolean[500];//500长度的数组
for (int i=0;i<arr.length;i++){
arr[i]=true; //数组初始化都是true
}
int leftCount=arr.length; //记录剩下的人数,初始化也是500
int countNum=0; //记录喊得口号数,分别为1,2,3
int index=0; //记录当前位置
while(leftCount>1){ //人数大于1是,就执行循环
if(arr[index]==true){ //当前为true时,就执行括号里的代码,为false时该成员已经退出,就不用管他了
countNum++; //1,2,3往上加
if(countNum==3){ //到3时
countNum=0; //计数为0,即下一个同学喊1
arr[index]=false; //该同学为false,退出了
leftCount--; //剩下的人数减1
}
}
index++; //当前位置跟随while循环一块加
if(index==arr.length){ //当前位置为500时,从头开始
index=0;
}
}
for(int i=0;i<arr.length;i++){ //循环结束了
if(arr[i]==true){ //找到true的那个人
System.out.println(i); //输出
}
}
}
}
输出为435,这是从0开始的,所以序号为436的同学为胜利者。