约瑟夫环问题

    static void Main(string[] args)
        {

            ///解题思路:
            ///1,N个猴子,报数,报道M个猴子出圈
            ///2,输出N个人的出圈次序
            ///3,用数组模拟N猴子,数组类型为布尔,代表这个人是否出圈,为true时这猴子出圈
            ///4,我们可以用循环模拟报数,报到M的人出圈。当N个人全部出圈之后循环结束
            ///5.报数的时候,需要判断,没出圈的人才能报数。
            int n;
            int m;
            Console.WriteLine("N代表圈中有多少人");

            n = int.Parse(Console.ReadLine());
             Console.WriteLine("M代表出圈的人");
            m = int.Parse(Console.ReadLine());
            int index = 0;
            int count = 0;
            int num = 0;
            bool[] monkey = new bool[n];

            while (num <= m)
            {
                if (monkey[index] == false)
                {
                    count++;
                    if (count == m)
                    { 
                        //下一个人从新报数
                        count=0;
                        //当前报M的人出圈
                        monkey[index] = true;
                        //出圈人数加1
                        num++;
                        Console.WriteLine("第{0}个人出圈了", index + 1);
                    }
                
                }
                //下一个人报数,index同时注意越界          
                index++;
                index %= n;
              
            }
            Console.ReadLine();
        }
原文地址:https://www.cnblogs.com/tianranhui/p/10731031.html