程式設計題目:
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);//傳回它的值
}
}