/** *使用数组实现约瑟夫环问题 *由arrLen个人围成一个首尾相连的圈报数。 *从第一个人开始,从1开始报数,报到num的人出圈, *剩下的人继续从1开始报数 *对于给定的m和n,求出最后的赢家 */ public class hello { static int arrLen=3;//定义数组大小 static int num=2;//定义 所报之数 public static void main(String[] args){ //System.out.println("Hello World!"); int arr[]=new int[arrLen]; for(int i=0;i<arr.length;i++) arr[i]=i+1; f(arr,num); } static void f(int[] a,int n){ int len=a.length; int i=0,j=1; while(len>0){ if(a[i%arrLen]>0){ if(j%n==0){ if(len==1) System.out.print(a[i%arrLen]); a[i%arrLen]=-1; j=1; i++; len--; }else{ i++; j++; } }else{ //遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数 i++; } } } }