每日一题:约瑟夫环问题(丢手绢问题)(附答案)

169 阅读1分钟

最近又要开始找工作了,打算每天做一道算法题,为面试准备

题目: 一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号

我的解法

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    int[] arr = new int[]{1,2,3,4,5,6};
    int j = 5;
    int i = 1;
    int w = 1;
    int count = 0;
    while(true){
        if(count >= arr.length){
            break;
        }
        int index = (i - 1) % arr.length;
        if(arr[index] != 0){
            if(w % j == 0){
                list.add(arr[index]);
                arr[index] = 0;
                count++;
            }
            w++;
        }
        i++;
    }
    list.stream().forEach(f-> System.out.println(f));
}

如果你有更好的解法,可以给我留言