标签:
/**
* 约瑟夫环问题主要是考虑下标问题,只要解决了下标控制问题,这个题目就不难了
* 在这里我是分成了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 }
标签:
原文地址:http://www.cnblogs.com/zxxiaoxia/p/4244924.html