对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。
输入描述:
每组数据一行一个数字,为题目中的n(n小于等于1000)。
输出描述:
一行输出最后剩下的数字。
我的思路是用两个链表,一个用于存储原数据,一个用于存储要丢掉的数据,再循环从元数据中剔除掉即可。
public static void main(String[] args) { int size = 5000; LinkedList<Integer> integers = intToLList(size); LinkedList<Integer> integers2 = new LinkedList<>(); while (integers.size() != 1) { for (int i = 0; i < integers.size(); i++) { if ((i+1)%2 != 0) { integers2.add(integers.get(i)); } } for (Integer integer : integers2) { integers.remove(integer); } } System.out.println(integers.get(0)); } private static LinkedList<Integer> intToLList(int n) { LinkedList<Integer> integers = new LinkedList<>(); for (int i = 0; i <= n; i++) { integers.add(i); } return integers; }