题目链接
题解
约瑟夫问题细品一下,就是一个链表成环,根据规则要求逐渐remove的一个思路。代码详解如下:
package com.company;
import java.util.LinkedList;
import java.util.Scanner;
/**
* @Author 小GUI渡江
* @Date 2022/4/6 23:57
**/
public class yuesefu_7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//总人数
int n = scan.nextInt();
//号码
int m = scan.nextInt();
//创建链表
LinkedList<Integer> sites = new LinkedList<Integer>();
for(int i = 0; i < n; i++){
sites.add(i + 1);
}
int flag = 1;
//LinkList继承了AbstractCollection的一个判空方法
while(!sites.isEmpty()) {
//核心思想就是更新链表的头结点,将没出去的数往后挪,动态的形成一个环
if(flag < m) {
sites.addLast(sites.removeFirst());
flag++;
}else if(flag == m) {
int num = sites.removeFirst();
System.out.print(num + " ");
flag = 1;
}
}
}
}