标签:
约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序。下面是我用java实现的解决方法。
1 class JosephLoop 2 { //n为环中人数,m为每次报数的人数,k为报数的起始位置0-n 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 }
标签:
原文地址:http://www.cnblogs.com/youilika/p/4862747.html