约瑟夫环问题-Java数组解决

  约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序。下面是我用java实现的解决方法。

  

 1 class JosephLoop
 2 {    //n为环中人数,m为每次报数的人数,k为报数的起始位置0~n-1
 3     int n,m,k;
 4     int[] persons;
 5     int[] seq;
 6     
 7     JosephLoop(int n, int k, int m){
 8         this.n = n;
 9         this.m = m;
10         this.k = k;
11         persons = new int[n];
12         seq = new int[n];
13 
14     }
15     
16     public void showSeq(){
17         for (int x:seq )
18         {
19             System.out.print(x+" ");
20         }
21     }
22     
23     public void calcLoop(){        
24         for(int j=0;j<n;j++)
25         {    
26             int index=k;
27             for (int i=0; i<m ; index++)
28             {
29                 if (persons[index%n]==0)
30                 {
31                     i++;
32                 }
33             }
34             persons[(index-1)%n] = 1;
35             seq[j] = (index-1)%n;
36             k = (index)%n;
37         }
38     }
39 
40 }
 1 class LoopTest 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         JosephLoop jose = new JosephLoop(12,5,4); //n,k,m
 6         jose.calcLoop();
 7         jose.showSeq();
 8         
 9     }
10 }

 

    原文作者:coder_whb
    原文地址: https://www.cnblogs.com/youilika/p/4862747.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞