[编程题] 奇数位丢弃
时间限制: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);
}
}
参考: