題目描述:有30個人,從第一個人開始依次報數(從隊頭到隊尾,接着從隊頭開始),數字範圍從1到9,報數字9的人出列。假定最後剩下15個人,求這15個人一開始在隊列中的位置。
代碼:
import java.util.ArrayList;
//30個人,編號0-29,從第一個人開始從1開始數數,將數到9的人移除。要剩下15個人,看剩下的人原先的位置是什麼
public class CountTurns {
public static void main(String[] args) {
CountTurns test = new CountTurns();
test.func1(30, 9, 15);
}
/**
* 人數爲num,每數到turn,對應的人出列
* @param num
* @param turn
* @param rest 剩下rest個人
*/
private void func1(int num, int turn, int rest) {
//check param
if(num<=0 || turn<=0 || rest<0)
return;
ArrayList<Node> list = new ArrayList<>();
for(int i = 0; i<num; i++) {//10個人
Node node = new Node(i);
list.add(node);
}
int cur = -1;//用來記錄數到的數字
int pos = -1;//記錄某節點在隊列中對應的下標
while(list.size()>rest) {
pos++;
if(pos == list.size()) {
pos = 0;
}
cur++;
if(cur==turn-1) {
list.remove(pos);
pos--;
cur = -1;
}
}
for(int j = 0; j<rest; j++) {
System.out.println(list.get(j).pos);
}
}
}
class Node{
public int pos;
public Node(int pos) {
super();
this.pos = pos;
}
}
結果: