对于一个由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;
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。 问此人原来的位置是多少号? java解答:有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号? Python-函数-写函数,获取传入列表的所有奇数位索引对应的元素,并将其作为新列表返回 2、牛牛想对一个数做若干次变换,直到这个数只剩下一位数字。 变换的规则是:将这个数变成 所有位数上的数字的乘积。比如285经过一次变换后转化成2*8*5=80. 问题是,要做多少次变换,使得这个数变成个位 用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找出下一个非0数,并从数表中删去该倍数的所有倍数; 以此类推,直到所找到的下一个数等于n为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23... 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字的最小的一个 编写一个函数,计算三个数字的大小,按从小到大的顺序输出。 输入30个数存入数组a,求出数的每个位数的平方和存入数组b,从小到大排列后输出(C语言) 有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
 
粤ICP备18138465号  © 2018-2026 CODEPRJ.COM