public static int circle(int n){
int[] arr=new int[n];
for(int i=0;i<arr.length;i++){
arr[i]=i+1;
}
int count=0;int src=n;int index=0;
while(n>1) {
if (arr[index]!= -1) {
count++;
}
if (count == 3) {
arr[index] = -1;
count = 0; //以3循环计数
n--;
}
index = ++index % src; //保证首尾循环报数
}
for(int i=0;i<src;i++){
if( arr[i]!=-1){
return arr[i];
}
}
return -1;
}
public static void main(String[] args) {
int a=circle(10);
System.out.println("最后获胜人的编号是:"+a);
}
例如:10个人参与游戏,每人编号1-10;
1 2 3 4 5 6 7 8 9 10 -> 开始报数:(以3为基准)
3置为-1;6置为-1;9置为-1;一轮完,从10继续循环至1处重新报数:将2置为-1;依次7置为-1;1置为-1;8置为-1;5置为-1;10置为-1.得到结果4,即
运行结果: