1. 程式人生 > >有n個人(1到n號)圍成一個圈,從第1號按順序報數(1-3),每報數為3的人從隊伍去除,下個人繼續從1開始報數,問最後剩下的那個人原來排在第幾位- java

有n個人(1到n號)圍成一個圈,從第1號按順序報數(1-3),每報數為3的人從隊伍去除,下個人繼續從1開始報數,問最後剩下的那個人原來排在第幾位- java

有n個人(1到n號)圍成一個圈,從第1號按順序報數(1-3),每報數為3的人從隊伍去除,下個人繼續從1開始報數,問最後剩下的那個人原來排在第幾位

思考

首先將這n個人原來的號碼存放在集合list中,然後迴圈遍歷他們,報數不為3的人新增到另外一個集合tempList中,而報3的人就直接跳過,迴圈一圈後記錄下最後一個人的報數號+1mod3,重新遍歷該集合,知道最後集合的大小為1時輸出

程式碼

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static
void main(String args[]) { List<Integer> list = new ArrayList<Integer>(); for(int i = 1 ; i <= 100; i++){//將原來的號存入list list.add(i); } getItem(list,1); } public static void getItem(List<Integer> list,int index){ List<Integer> tempList = new
ArrayList<Integer>();//宣告另外一個list集合,存放遍歷後的人 if(list.size()==1){//若集合大小為1,則是最後一人 System.out.println("剩餘的一個人是原來的第" + list.get(0) + "位"); return ; } for(int i = 0 ; i < list.size() ; i++){//遍歷集合 if((index++) % 3!=0){ tempList.add(list.get(i));//報號不為3的,新增進另一個集合
} } getItem(tempList,index%3);//遞迴 } }