1. 程式人生 > >java——約瑟夫環

java——約瑟夫環

問題描述:一圈人(n個)圍著一起報數,報到x的淘汰,規定最後場上剩下的y人為勝利者。

    /**
     * 約瑟夫環,用陣列方法解決
     * @param personNumber  總人數
     * @param number         報到就淘汰的數字
     * @param survive        最後需要留的人數
     */
    public static void josephRing(int personNumber,int number,int survive) {
        int[] array = new int[personNumber]; //先把人放到數組裡面,陣列下標就是編號
        int m = 0;  //計數
        int n = personNumber;  //報到number數的人數
        while(n > survive) {
            for (int i = 0; i < array.length; i++) {
                if (array[i] == 0) {
                    m++;
                    if (m == number) {
                        m = 0;  //如果數到number數字,該人出局,重新從1開始數數
                        array[i] = 1; //將報了number數的人標記為1
                        n--;   //報一個number少一個人
                        System.out.println(i + 1 + "號淘汰");
                    }
                }
            }
        }

        for(int i = 0;i < array.length;i++) {
            if(array[i] == 0) {
                System.out.println(i+1+"號成功");
            }
        }

    }