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--;//下一個報數的人在陣列列表中的下標值
n--;//圈子的總人數減少1
number=0;//通過number++,下一個人報的數是1
}
number++; //報數時,每次加1
if(i==n-1){//當所有的人報完一圈
i=-1;//下一次從圈裡的第一個人報,通過for迴圈的i++,對應陣列列表下標值為0
}
if(n==1){//如果整個圈子最後只剩下一人
break;
}
}
System.out.println("最後留下的是原來"+group.get(0)+"號的那位。");
}
}