天天看點

Java實作所有人圍成一圈,順序排号。從第一個人開始報數(從 1 到 3 報數), 凡報到 3 的人退出圈子,剩下的人繼續報數,最後留下的當選為隊長。 請你通過編寫程式,求出一組人中的隊長是原來第幾位

By 張旭 CaesarChang 合作 : [email protected]

關注我 帶你看更多好的技術知識和面試題

思路結合注釋:

首先擷取一個總人數 , 然後開一個數組,初始化為1 ,在開一個計數器 suM, 如果sum==3

那麼将數組為 0 ,并且更新 剩餘人數,隻要剩餘人數不是1,那就在while循環裡面不斷循環 ,

最後輸出數組中值為1的下标+1就好了 (從0開始的數組)

import java.util.Scanner;

public class Day4_demo1 {
    public static void main(String[] args) {
        System.out.println("請輸入總人數:");
        Scanner scanner=new Scanner(System.in);
        int totalNum=scanner.nextInt();    //擷取總人數
        int[] number=new int[totalNum];     //為總人數開辟一個數組
        for(int i=0;i<totalNum;i++){        //為數組初始化 全為1
            number[i]=1;
        }
        int remain=totalNum;                //記錄目前剩餘人數
        int sum=0;                          //用來計數 判斷是否等于3
        while(remain!=1){                   //判斷是否剩餘人數為1
            for(int i=0;i<totalNum;i++){    //進行周遊數組
                sum=sum+number[i];          //更新計數
                if(number[i]==0){           //為0的人不周遊
                    continue;
                }
                if(sum==3){                 //如果報數為3
                    number[i]=0;            //将此人值設為0
                    sum=0;                  //将sum清零
                    remain--;               //剩餘的人數更新
                }
            }
        }
        for(int i=0;i<totalNum;i++){        //輸出不為0的人的(下标+1)
            if (number[i]!=0){
                System.out.println("隊長所在位置為 "+(i+1));
            }
        }

    }
}           

複制