實現約瑟夫環
阿新 • • 發佈:2018-09-04
賦值 答案 就是 必須 創意 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去標記對應數字,雖然消耗了額外的空間,但是是非常有創意的實現方式,可讀性很高。
實現約瑟夫環