1. 程式人生 > >標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號

標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號

stat 留下 pub ++ [] amp n) person last

標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號

public static void lastPerson(int n){
        if (n < 1){
            throw new IllegalArgumentException("人數不能小於0");
        }else {

            int[] persons = new int[n + 1];
            int num = 0;  //模擬報數 1~3
            int dead = 0; //退出人數

            //給每個人進行標號,以便獲取最後留下那個人的編號
            for (int i = 1; i <= n; i++) {
                persons[i] = i;
            }

            for (int i = 1; ; i++) {
                if (i > n) { //如果i>n; 重新開始 i=1;
                    i = 1; //等價於 i=1
                }

                if (persons[i] != 0) { //如果這個人沒有退出,則報數
                    num++;
                }

                if (num == 3 && dead != n - 1) { //如果退出人數不等於或者說小於n-1, 則表示遊戲未結束
                    num = 0;  //num重置
                    persons[i] = 0;   //表示此人退出
                    dead++; //退出人數+1
                } else if (dead == n - 1) { //只剩下最後一人,表示此人是幸存者
                    System.out.println("幸存者編號為:" + i);
                    break;
                }
            }

標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號