C#算法之约瑟夫环算法浅析

csdnfelix 2009-08-11

在C#算法的学习中碰到了C#约瑟夫环算法,那么约瑟夫环算法是什么呢?,首先我们来看看约瑟夫环问题描述:

设有n个人围坐一圈,现以某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止.按出列顺序输出.

下面就是C#算法之约瑟夫环算法的实现程序:

public class Josephas   


   



 //从第start人开始计数,以alter为单位循环记数出列,总人数为total   




   public int [ ] Jose(int total, int alter, int start)       



   {            



        int i, j, k = 0;   



 



        //count数组存储按出列顺序的数据,以当结果返回   




        int[] count = new int [ total+1];      



 



        //s数组存储初始数据   




        int[] s = new int [ total+1];       



 



        //对数组s赋初值,第一个人序号为0,第二人为1,依此下去  




        for (i = 0; i <total; i++)       



        {   


            s[i] = i;   


       }   


 



        //按出列次序依次存于数组count中   




        for (i = total; i >= 2; i--)        



       {   


            start = (start + alter - 1) % i;   



            if (start == 0)   



                start = i;   


            count[k] = s[start];   


            k++;   



            for (j = start + 1; j <= i; j++)           



         s[j - 1] = s[j];   


        }                 


        count[k]=s[1];   


 



        //结果返回   




        return count;       



    }   


}  

相关推荐