#region 解决方案一 //思路:把所有的位置的值都标为1,,循环判断是3的倍数的位置的值标为2 Console.WriteLine("请输入人数:"); int number = int.Parse(Console.ReadLine()); List<int> lastThree = new List<int>(); int lastResult = 0; int[] intArr = new int[number]; for (int i = 0; i < intArr.Length; i++) { intArr[i] = 1; } int index = 0; int length = intArr.Length; int last = -1; while (length > 1) { for (int i = 0; i < intArr.Length; i++) { if (intArr[i] == 1) { index++; if (index == 3) { if (length==2) { last = i; length--; break; } index = 0; intArr[i] = 2; length--; } } } } for (int i = 0; i < intArr.Length; i++) { if (intArr[i] == 1) { lastResult = i; } } Console.WriteLine("最后一个出圈的人是原来的下标为{0}号,留下来的是原来的{1}号", last,lastResult); Console.ReadLine(); #endregion