约瑟夫环

140 阅读1分钟

模拟


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        int n = 10, k = 3, m = 3;
        fun(10, 3, 3);
    }

    private static void fun(int n, int k, int m) {
        boolean[] isVisited = new boolean[n + 1];
        List<Integer> res = new ArrayList<>();
        int idx = k, cnt = 1;
        while (res.size() < n) {
            while (cnt < m) {
                while (isVisited[idx]) {
                    idx = (idx + 1) == n ? n : (idx + 1) % n;
                }
                cnt++;
                idx = (idx + 1) == n ? n : (idx + 1) % n;
            }
            while (isVisited[idx]) {
                idx = (idx + 1) == n ? n : (idx + 1) % n;
            }
            res.add(idx);
            isVisited[idx] = true;
            cnt = 1;
        }
        System.out.println(Arrays.toString(res.toArray()));

    }
}