[c#算法和数据结构]约瑟夫环问题

问题描述:
       设有n个人围坐一圈,现以某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止.按出列顺序输出.
 
     //******************************    
     //描述:约瑟夫环问题
     //类名:Josephas
     //作者:洪晓军
     //时间:2004-12-27
     //******************************   

 1    public class Josephas 
 2    
 3        //从第start人开始计数,以alter为单位循环记数出列,总人数为total 
 4        public int [ ] Jose(int total, int alter, int start)     
 5        {          
 6            int i, j, k = 0
 7
 8             //count数组存储按出列顺序的数据,以当结果返回 
 9            int[] count = new int [ total+1];    
10
11            //s数组存储初始数据 
12            int[] s = new int [ total+1];     
13
14             //对数组s赋初值,第一个人序号为0,第二人为1,依此下去
15            for (i = 0; i <total; i++)     
16            
17                s[i] = i; 
18            }
 
19
20            //按出列次序依次存于数组count中 
21            for (i = total; i >= 2; i--)      
22            
23                start = (start + alter - 1% i; 
24                if (start == 0
25                    start = i; 
26                count[k] = s[start]; 
27                k++
28                for (j = start + 1; j <= i; j++
29                    s[j - 1= s[j]; 
30            }
  
31               
32            count[k]=s[1]; 
33
34            //结果返回 
35            return count;     
36        }
 
37    }
 


 以上程序在Microsoft Visual Studio .NET 2003 和Visual C# 2005 Express Edition Beta1中均调试通过.
       

posted on 2005-01-18 21:06  Inrie  阅读(11562)  评论(20编辑  收藏  举报