1. 程式人生 > >Java解決有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位

Java解決有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位

練習題、有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class Circle{

public static void main(String[] args) {

    System.out.println("請輸入圍成圈的人數:");

    @SuppressWarnings("resource")

    Scanner input=new Scanner(System.in

);

    int n=input.nextInt();

    List<Integer> group=newArrayList<Integer>();

    //1、給陣列列表初始化資料

    for(int i=1;i<=n;i++){

       group.add(i);

    }

    //2、報數

    int number=1;//第一個人報數為1

          //圈裡的人迴圈報數

       for(int i=0;i<n;i++){   

           if(number==3){//當圈裡第i+1個人報道的數是3

              group.remove(i);//

圈裡第i+1個人退出圈子

              i--;//下一個報數的人在陣列列表中的下標值

              n--;//圈子的總人數減少1   

              number=0;//通過number++,下一個人報的數是1

           }

           number++;  //報數時,每次加

           if(i==n-1){//當所有的人報完一圈

              i=-1;//下一次從圈裡的第一個人報,通過for迴圈的i++,對應陣列列表下標值為0

           }

           if(n==1){//如果整個圈子最後只剩下一人

              break;

           }

    }

    System.out.println("最後留下的是原來"+group.get(0)+"號的那位。");

}

}