《黑馬程式設計師》 java演算法練習題
阿新 • • 發佈:2019-02-20
public class Demo { /* * 有100個人圍成一個圈,從1開始報數,報到14的這個人就要退出。 * 然後其他人重新開始,從1報數,到14退出。 * 問:最後剩下的是100人中的第幾個人? */ public static void main(String[] args) { //建立一個集合將要數數的100個新增 ArrayList<Integer> alPersons=new ArrayList<Integer>(); for(int i=1;i<=100;i++){ alPersons.add(i); } //建立一個集合獲取所有退出的人 ArrayList<Integer> outPersons=getOutPerson(); //從所有人的集合中將退出人的集合刪除 //即把所有的退出的人給刪除掉了 //集合中所留下的就是沒有刪除的人 alPersons.removeAll(outPersons); //對集合進行迭代 for(Iterator<Integer> itea=alPersons.iterator();itea.hasNext();){ System.out.print(itea.next()+" "); } } public static ArrayList<Integer> getOutPerson(){ //建立一個臨時的集合中於將數到14的這個人新增到集合中 ArrayList<Integer> tempList=new ArrayList<Integer>(); //記錄每個人數到的數 int count=0; for(int i=1;i<=100;i++){ count++; //迴圈一次,記錄一次別人數到的數 while(tempList.contains(i)){ i++; //如果集合中已經存在了這個數字就往下一個進行判斷 //直到集合中不包含這個數時迴圈退出 if(i==101){ //如果判斷到了第100個人就從第一個人重新開始判斷 i=1; } } if(count%14==0){ //如果計數器記錄到了14 //就把數到第14的這個人新增到集合中 tempList.add(i); count=0; //把計數器置為0從1重新開始數 } if(i==100){ //如果是第100個人在數 //就從第1個重新開始數 i=1; } if(tempList.size()>86){ //如果集合的長度是86則儲存的資料其實是儲存了87個 //角標是從0開始的。 break; //迴圈結束 } } return tempList; } }