java 实现约瑟夫环

每次移出一个数,此时集合少一个元素。后续的元素往前挪一个位置,下一次依旧是当前位置开始数。因此,和count同步数的i,在删除一个元素后,应该不会到下一个元素,依旧停留在本元素位置。

package fortest;

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class test {

    public static void main(String[] args) {
        System.out.println(getWinner(5, 9));
    }

    /*
     * 参数 : number - 总共人数 , countNum - 报到就出列
     * 返回值 : 幸存者
     * 功能 : 从一开始报数,报到countNum就出列
     * 注意 :
     *  每次移出一个数,此时集合少一个元素。
     * 当访问下一个元素时,其实就是当前删除位置的元素
     * 由原来的元素往前挪一位变化而来
     */
    private static int getWinner(int number, int countNum) {
        // TODO Auto-generated method stub
        if(countNum == 0 || countNum ==1) {
            return number;
        }
        ArrayList<Integer> people = new ArrayList<>();      
        for(int i = 1; i <= number; i ++) {
            people.add(i);
        }       
        int count = 1;
        for(int i = 0; people.size() != 1; i ++) {
            if(i == people.size()) {
                i = 0;
            }
            if(count%countNum == 0) {
                people.remove(i--);
            }
            count ++;
        }
        return people.get(0);
    }
}

猜你喜欢

转载自blog.csdn.net/ai_shuyingzhixia/article/details/80821196