美團點評2016研發題目-[編程題-美團] 奇數位丟棄

[編程題] 奇數位丟棄

時間限制:1秒

空間限制:32768K

對於一個由0..n的所有數按升序組成的序列,我們要進行一些篩選,每次我們取當前所有數字中從小到大的第奇數位個的數,並將其丟棄。重複這一過程直到最後剩下一個數。請求出最後剩下的數字。
輸入描述:
每組數據一行一個數字,爲題目中的n(n小於等於1000)。
輸出描述:
一行輸出最後剩下的數字。
輸入例子1:
500
輸出例子1:
255

約瑟夫環問題:

import java.util.*;

public class Main{
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		while (input.hasNext()) {
			int n = input.nextInt();
			int result = getRes(n);
			System.out.println(result);
		}
	}

	// 約瑟夫環問題
	private static int getRes(int n) {
		List<Integer> list = new LinkedList<Integer>();
		for (int i = 0; i <= n; i++)
			list.add(i);
		while (list.size() != 1) {
			// 從0開始list移除一次,i再加一次,i始終指向奇數位
			for (int i = 0; i < list.size(); i = i + 1)
				list.remove(i);
		}
		return list.get(0);
	}
}

參考:

孩子們的遊戲(圓圈中最後剩下的數)




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