練習題---報數遊戲(圓圈中最後剩下的數字)---用Java實現

題目描述:有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;
	}
}

結果:

結果爲0 1 2 3 9 10 12 13 14 16 19 20 24 27 28

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章