标题:n个人围成一个圈报3,或者约瑟夫环,或者丢手绢
下面这个视频,可以让你了解什么是约瑟夫环,此后,自己写代码实现一下,可以看看我的代码作为参考,
参考视频:
调用,n=10,编号从1-10,start = 2,从2开始报数【1 2 3】
刚开始的时候,将start固定为1,就好了,
//丢手帕,n个人围成一个圈,报数3,约瑟夫环
public void test02(int n,int start){
int count = 0;
int[] arr = new int[n+1];
int count_c = 0;
int i = start;
while(true)
{
//1.计数
count++;
if(count == 3){
//淘汰
arr[i] = -1;
count = 0;
count_c++;
System.out.print(i + " ");
}
//十个人都报完了数
if(count_c == n){
return ;
}
//2.下一个人
i++;
//操作n,就重新循环,eg:n=10,i++就变成了11,
if(i > n){
i = 1;
}
//3.只要遍历了,就找下一个,最后,就只有一个人了,一次轮回后,
while(arr[i] == -1){
i++;
//重新循环
if(i > n){
i = 1;
}
}
}
}