[編程題] 奇數位丟棄
時間限制: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);
}
}
參考: