JAVA解决约瑟夫环的问题
总体思想:
从0开始循环到100,到了100就再次循环,形成一个环
用index 0循环到100就可以实现
当index=100就把count归零
然后在index循环中,每三个一轮
从count计数器表示,从0开始循环,每次到3,那么这个人就死亡
接着count计数器置零,继续自加,下一个人还是一样,当count到了3,继续死亡,直到最后一个人。。。
/**
* 约瑟夫环JAVA算法
* @author garen
* */
package day4;
public class JosephCircle {
// 主函数
public static void main(String[] args) {
//定义100人,用boolean来表示是否在环内
boolean[] b = new boolean[100];
//有多少人循环多少次,设置每个人为true(在环内)
for (int i = 0; i < b.length; i++) {
b[i] = true;
}
//记录总人数,方便结束循环
int len=b.length;
//计数器初始为0
int count=0;
//索引,记录当前的位置
int index=0;
//还剩一个人以上时
while(len>1){
//如果当前这个人在环内,计数器count+1
if(b[index]){
count++;
//如果到第三个人了
if(count == 3){
b[index]=false;//踢出这个人
len--;//人数少一个人
count=0;//计数器置零,方便重新算三个人
}
}
//循环一次索引+1,指向下一个人
index++;
//防止index越界,一轮回后重置
if(index==b.length){
index=0;
}
}
//循环,找出最后true(在环内)的人
for(int i=0;i<b.length;i++){
if(b[i]){
System.out.println("最后一个人在:"+i);
break;//提前找到就跳出
}
}
}
}