編程題目:
61.50個人圍成一圈數到三和三的倍數時出圈,問剩下的人是誰?在原來的位置是多少?
示例代碼:
package program.calculation.exercise61;
import java.util.ArrayList;
import java.util.List;
/**
* 61.50個人圍成一圈數到三和三的倍數時出圈,問剩下的人是誰?在原來的位置是多少?
*
* 說明:由於每次去掉元素以後,元素的個數會少一個,因此下一個3的倍數其實只需要走兩步,
* 在爲其下標賦值的時候,需要減一,保持每次去掉的元素報數都是3的倍數。
* 如果使用從0開始的下標開始計算,那麼初始化的時候應該使用-1(對應後來的index--),
* 這樣就可以模擬元素已經減少一個了(令起始數字爲123,初始化爲-1,下一個去掉的數字就是3).
* 如果下標爲0的被刪除,下標爲1的還沒有被刪除,這時候下標爲1的數字的下標自動爲0。
*/
public class CircleGame {
public static void main(String[] args) {
int num = outCycle(6, 3);
System.out.println("該數字原來的位置是:"+num);
}
//出圈
private static int outCycle(int n, int m) {
int index = -1; //定義下標,模擬已經去掉一個元素,因此從-1開始
List<Integer> list = new ArrayList<Integer>();//創建集合對象
for (int i=1;i<=n;i++){ //添加數據元素
list.add(i);
}
while (list.size() > 1) { //一直循環去除數據,直到只剩下一個元素
index = (index+m) % list.size();//得到應該出局的下標
list.remove(index--); //去除元素
}
return list.get(0);//返回它的值
}
}