- /**约瑟夫问题:一共N个人围一圈报数,数到M的那个人出圈,直到最后一个人,他们出圈的顺序是怎样的。
-
- */
- public class LuckNumberTest1{
- public static void getList(int arr[],int digital){
- int i=0;
- int num=1;//从1开始报数
- int n=0;//记录出圈人的个数
- for(;i<arr.length && n<arr.length;i++){
-
- if(arr[i]!=-1){//当前这个人是否被标记过,没有则参与报数(数增加)
- if(num%digital==0){//把那个数到3的人标记,之后不参与报数
- System.out.print(arr[i]+",");
- arr[i]=-1;
- n++;
- }//
- num++;
- }
- if (i==arr.length-1)//转到末尾那个人,进行第二圈
- i=-1;
- }
- }
- public static void main(String[] args){
-
- //int[] a={1,2,3,4,5,6,7,8,9,10,11,12,13};//13个人围成一圈
- int[] a=new int[]{1,2,3,4,5,6,7,8};
- for(int i=0;i<a.length;i++){
- a[i]=i+1;
- }
- getList(a,3);//数到3的人自动退出
- }
-
- }
复制代码
|
|