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++; } } } }