约瑟夫环(排成圈)

简介: /** * 约瑟夫环问题主要是考虑下标问题,只要解决了下标控制问题,这个题目就不难了 * 在这里我是分成了3中情况: * 1,下标小于剩余人数时:删除当前元素,并将下标后移 * 2.下标大于剩余人数时:用下标对剩余人数取于,删除元素,并下移下标 * 3.

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

 

相关文章
|
3月前
|
机器学习/深度学习
约瑟夫环
【10月更文挑战第11天】
100 5
|
3月前
约瑟夫环问题
约瑟夫环
31 0
|
8月前
每日一题——圆圈中最后剩下的数字(约瑟夫环问题)
每日一题——圆圈中最后剩下的数字(约瑟夫环问题)
约瑟夫环问题的几种解法
约瑟夫环问题的几种解法
116 0
|
算法
约瑟夫环问题(三种方法)
约瑟夫环问题(三种方法)
157 0
|
算法 索引 Python
细究“约瑟夫环”
细究“约瑟夫环”
103 0
|
JSON 算法 JavaScript
日拱算法:典例-快慢指针解“环形链表”
本篇带来一道基础但典型的体现快慢指针思路的算法题:环形链表 快慢指针是双指针的一种,用于判断链表是否有闭环,十分好用~ 冲ヾ(◍°∇°◍)ノ゙
|
C++ Python
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环的解法
约瑟夫环的解法
131 0