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(); }