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