1. 程式人生 > >實現約瑟夫環

實現約瑟夫環

賦值 答案 就是 必須 創意 class 復習 標記 sys

最近在看關於約瑟夫環的一些解決思路,發現了一種很有創意的解法,記錄下,用來復習。

//用於判斷某個數是否已經被剔除
        boolean[] isChoosed = new boolean[n];
        //記錄答案數組
        int[] array = new int[n];
        //記錄人數
        int num = n;
        //記錄循環次數,最後的值就能知道你必須要數多少次,才能剩下一個人
        int count = 0;

        //如果人數只有一個人的時候,就結束循環
        while (num != 1) {
            
//每一次的循環 for (int i = 0; i < n; i++) { //如果這個位置沒有被選擇,也就是沒有被刪除,那麽就給他賦值 if (!isChoosed[i]) { count++; array[i] = count; if (count % 3 == 0) { isChoosed[i] = true; num
--; System.out.println((i + 1) + "號被淘汰了"); } } } }

這種方式不會破壞原始數組,非常巧妙的用boolean去標記對應數字,雖然消耗了額外的空間,但是是非常有創意的實現方式,可讀性很高。

實現約瑟夫環