【毎週1回計算】最後に残った人を求めるのは何人目(1周目の人が数を報告し、3の脱退を報告する)


テーマ:n人が1周して、順番に並べます.最初の人から数え始め(1から3まで)、3までの人は輪を脱退して、最後に残ったのは元の何位ですか?
問題を解く:
例えばn=2、最後に残ったのは2
n=3、最後に残ったのは2
n=4、最後に残ったのは1
n=5、最後に残ったのは4
この問題は、書いているうちに考えがつく.
package com.jandmin.demo.leetcode;

import com.alibaba.fastjson.JSONObject;

/**
 * @description:           
 *        n       ,    。         ( 1 3  ),   3      ,
 *                     ?
 *         n = 2,        2
 *          n = 3,        2
 *          n = 4,        1
 *          n = 5,        4
 * @author: JandMin
 * @create: 2019-08-09
 **/
public class LastRemainderSerial {
    public static void main(String[] args) {
        int n = 100;
        //        
        int[] serials = initSerial(n);
        System.out.println(JSONObject.toJSONString(serials));

        //          :    0
        excludeThird(serials);
        System.out.println(JSONObject.toJSONString(serials));

        //      0        
        int last = getLastSerial(serials);
        System.out.println("the last remainder is " + last);
    }

    /**
     * @Description:      0   
     * @Date: 2019/8/9
     * @param lastArray          
     * @return: int
     */
    private static int getLastSerial(int[] lastArray) {
        for(int i : lastArray){
            if(i != 0){
                return i;
            }
        }
        return 0;
    }

    /**
     * @Description:      :   0
     * @Date: 2019/8/9
     * @param serials       
     * @return: void
     */
    private static void excludeThird(int[] serials) {
        //        
        int remainder = serials.length;
        int len = remainder;
        //       
        int start = 0;

        //            0
        while (remainder > 1){
            for(int i = 0; i