首页 > 代码库 > 约瑟夫环(排成圈)

约瑟夫环(排成圈)

/**
* 约瑟夫环问题主要是考虑下标问题,只要解决了下标控制问题,这个题目就不难了
* 在这里我是分成了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 }

 

约瑟夫环(排成圈)