首页 > 代码库 > 约瑟夫环(排成圈)
约瑟夫环(排成圈)
/**
* 约瑟夫环问题主要是考虑下标问题,只要解决了下标控制问题,这个题目就不难了
* 在这里我是分成了3中情况:
* 1,下标小于剩余人数时:删除当前元素,并将下标后移
* 2.下标大于剩余人数时:用下标对剩余人数取于,删除元素,并下移下标
* 3.下标等于剩余人数或者是剩余人数的倍数的时候:移除最后一个元素,并让下标后移
*/
1 import java.util.LinkedList; 2 import java.util.Scanner; 3 4 public class StudentCode { 5 6 public static void main(String[] args) { 7 LinkedList<Integer> al=new LinkedList<Integer>(); 8 Scanner sc=new Scanner(System.in); 9 int m=sc.nextInt();10 int n=sc.nextInt();11 //初始化队列,给每个元素赋值12 for(int i=0;i<m;i++){13 al.add(i+1);14 }15 int index=n;16 int t=0;17 while(al.size()!=1){18 //第一种情况19 if(index<al.size()){20 //下标和逻辑值相差1(逻辑下标从1开始,实际下标从0开始)21 al.remove(index-1);22 //逻辑下标后移23 index=index+n-1;24 }else if((index)%al.size()!=0){25 //第二种情况26 t=(index)%al.size();27 index=t+n-1;28 al.remove(t-1);29 }else if((index)%al.size()==0||index%al.size()==0){30 //第三种情况31 al.removeLast();32 index=1+n-1;33 }34 }35 //输出元素36 System.out.println(al.get(0));37 }38 }
约瑟夫环(排成圈)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。