//约瑟夫环问题
// N个人,编号从1~N围成一圈,输入一个数,从1号开始报数,报到m的人出圈;下一人又从1开始报数,下一个报到m的人出圈,输出出圈顺序。
//怎么找到出圈的数,1)遍历原数组对m求余为0的元素输出,那么循环第二遍数据怎么处理 2)循环计数对m求余或者判断是否相等
//找到出圈的数怎么处理,1)删除,操作麻烦 2)元素标记,循环计数过滤掉此项
//遍历到数组末尾,怎么回到数组开头, 计数对N求余,容易循环取到元素下标
public void demo(){
//约瑟夫环问题
// N个人,编号从1~N围成一圈,输入一个数,从1号开始报数,报到m的人出圈;下一人又从1开始报数,下一个报到m的人出圈,输出出圈顺序。
//怎么找到出圈的数,1)遍历原数组对m求余为0的元素输出,那么循环第二遍数据怎么处理 2)循环计数对m求余或者判断是否相等
//找到出圈的数怎么处理,1)删除,操作麻烦 2)元素标记,循环计数过滤掉此项
//遍历到数组末尾,怎么回到数组开头, 计数对N求余,容易循环取到元素下标
int N = 5 ;
int m = 4;
if(N<=0 || m<=0){
System.out.println("数据错误");
}
List<Integer> flagList = new ArrayList();
for(int i = 0;i<N ;i++){
flagList.add(0);
}
int s = -1, i = 0,count = 1;
while(true){
s = (s+1)%N;
if(flagList.get(s)==0){
i++;
}
if(i==m){
i = 0;
flagList.set(s,count++);
System.out.println(s+1);
}
if(count>N){
break;
}
}
}
约瑟夫环问题
最新推荐文章于 2024-08-11 21:58:53 发布