一个很简单的小算法题,可以日常练手。
首先要明白它这个题的含义,这个题上面的3不只是一个数字,而是它所占的位置。
复杂度还可以,还有待改进。
Console.WriteLine("请输入人数:");
int number = int.Parse(Console.ReadLine());
int []list = new int[number];
int k = number;
int shu = 0;
int index = 0;//数组下标
while (k != 1) { //当只剩一个人的时候就结束循环
if (index >list.Length - 1) //构成环
index = 0;
if (list[index] == 0) { //从0开始报数
shu++; //报的数+1
if (shu == 3) { //如果这个人报的数是3,就把其数组值置为-1,代表他出局,人数k-1。然后重新从1报数
list[index] = -1;
k--;
shu = 0;
}
}
index++;//下标加1
}
for(int i = 0; i < list.Length; i++)
{
if (list[i] == 0)
Console.WriteLine("最后留下来的是第{0}位",i+1);
}
有更优的代码欢迎T我,I would be obliged!