早教吧 育儿知识 作业答案 考试题库 百科 知识分享

c#N个人报数的题目n个人围成一圈报数,报到3和3的倍数的人离开,最后剩下一人是几号?最后剩下的那人报的数的总和是多少?

题目详情
c#N个人报数的题目
n个人围成一圈报数,报到3和3的倍数的人离开,最后剩下一人是几号?
最后剩下的那人报的数的总和是多少?
▼优质解答
答案和解析
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入人数:");
int n=int.Parse(Console.ReadLine());
//创建报数的人的集合
List persons=new List();
for (int i=0; i < n; i++)
{
persons.Add(new Person());
}
//集合的索引、上一个报数的人的索引、已离队的人数、当前所报的数
int index=0, lastIndex=0, leaveCount=0, call=0;
while (true)
{
//如果当前这个人未离队
if (!persons[index].Leave)
{
//如果他所报的数是3的倍数
if (++call % 3 == 0)
{
persons[index].Leave = true;
leaveCount++;
//如果只剩最后一个人就退出循环
if (n - leaveCount == 1) break;
}
else
{//否则,累积当前这个人所报的数的和
persons[index].Sum += call;
lastIndex = index;
}
}
//集合索引+1,达到上限会回到0
index = ++index % n;
}

Console.WriteLine("最后一个人是第{0}个,他报数的总和是:{1}.", lastIndex + 1, persons[lastIndex].Sum);
Console.ReadLine();
}

}
class Person
{
///
/// 报数的总和
///
public int Sum = 0;
///
/// 是否离开报数队列
///
public bool Leave = false;
}