请教一道C语言题目!

来源:百度知道 编辑:UC知道 时间:2024/04/30 16:32:21
有N个人站成一圈,顺序排号,从第一个人开始报数(1到3),凡报到3的人退出圈子,问最后留下的是几号?

定义:N个数
定义:O=2
退出数为:N+O=N
循环
求反集合

这时我用C#实现的code

public class Count
{
public static int Left(int total)
{
bool[] isLeft = new bool[total+1];

for (int i=1; i<=total; i++)
{
isLeft[i] = true;
}

int left = total;
int token = 0;

while (left > 1)
{
for (int i=0; i<3; i++)
{
do
{
token ++;
if (token > total)
token = 1;
}
while (!isLeft[token]);
}

isLeft[token] = false;
left--;
}

for (int i=1; i<=total; i++)
{
if (isLeft[i])
return i;
}

return -1;

}
}

下面是单元测试code
[TestFixture]
public class ThreeFixture
{
[Test]
public void ForOne()
{
Assert.AreEqual(Count.Left(1), 1);
}