對於一個由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號的人開始報數,凡報到3的倍數的人離開圈子,然后再數下去。直到最后只剩下一個人為止。問此人原來的位置是多少號。 有17個人圍成一圈(編號為0~16),從第 0號的人開始從 1報數, 凡報到 3的倍數的人離開圈子,然后再數下去,直到最后只剩下一個人為止。 問此人原來的位置是多少號? 用篩選法可得到2~n(n<10000)之間的所有素數,方法是:首先從素數2開始,將所有2的倍數的數從數表中刪去(把數表中相應位置的值置成0);接着從數表中找出下一個非0數,並從數表中刪去該倍數的所有倍數; 以此類推,直到所找到的下一個數等於n為止。這樣會得到一個序列:2,3,5,7,11,13,17,19,23... 有1到100共100個數, 從1開始, 每隔1, 2, 3... 個數拿走一個數, 最后剩下幾?(約瑟夫環) 功能:輸入一個正整數,按照從小到大的順序輸出它的所有質因子(重復的也要列舉)(如180的質因子為2 2 3 3 5 ) 最后一個數后面也要有空格 一群猴子排成一圈,按1,2,...,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去...,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號 輸入一個正整數數組,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字的最小的一個 [Python]-輸入一個正整數數組,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。 2、牛牛想對一個數做若干次變換,直到這個數只剩下一位數字。 變換的規則是:將這個數變成 所有位數上的數字的乘積。比如285經過一次變換后轉化成2*8*5=80. 問題是,要做多少次變換,使得這個數變成個位 java解答:有17個人圍成一圈(編號0~16),從第0號的人開始從1報數,凡報到3的倍數的人離開圈子,然后再數下去,直到最后只剩下一個人為止,問此人原來的位置是多少號?
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM