约瑟夫问题----(数组+list)实现

import java.util.ArrayList;
import java.util.List;


public class JosephusProblem2 {
    public static void main(String[] args) {
        //lis: 1    2    3    4    5    6    7    8
        int[] arr = new int[8];
        for (int i = 0; i < 8; i++) {
            System.out.print(i+1+"	");
            arr[i]=i+1;
        }
        System.out.println();
        play(2, 2, arr);
        
    }
    
    /**
     * 
     * @param n 第几个开始报数
     * @param k  报数报到多少
     * @param lis 参加集合
     */
    public static void play(int n ,int k,int[] arr){
        if(arr==null ||arr.length==0|| n<=0 || n>arr.length){
            System.out.println("链表有误,请重新校验");
            return;
        }
        int m = 1;
        boolean flag = true;
        List<Integer> newLis = new ArrayList<Integer>();
        while(flag){
            if(newLis.size()==1){
                System.out.print(newLis.get(0)+"	");
                break;
            }
            newLis.removeAll(newLis);
            for (int i = 0; i < arr.length; i++) {
                int g = arr[i];
                if(g==0){
                    continue;
                }else{
                    newLis.add(g);
                }
                if(m==(n+k-1)){
                    System.out.print(g+"	");
                    arr[i] = 0;
                    n=0; //第一次循环后 步长从当前算起
                    m=0;
                    continue;
                }
                m++;
            }
        }
    }
}
原文地址:https://www.cnblogs.com/cai170221/p/13502241.html