题目:耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3„„,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
public static void fun()
{
//二维数组定义了13个人,后面是他们的状态(1代表未出局,0代表出局)
int[,] people =new int[13,2] { { 1,1 }, { 2,1 }, { 3, 1 }, { 4, 1 }, { 5, 1 }, { 6, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 }, { 10, 1 }, { 11, 1 }, { 12, 1 }, { 13, 1 } };
int count = 1;
int p = 0;
int outpeople = 0;
while (true)
{
if (people[p, 1] != 0)
{
if (count % 3 == 0)
{
people[p, 1] = 0;
outpeople++;
}
count++;
}
if (p == 12)
{
p = -1;
}
p++;
if (outpeople==12)
{
break;
}
}
for (int i = 0; i<13;i++)
{
if (people[i,1]==1)
{
Console.WriteLine(people[i, 0]);
}
}
}
不知道有没有改进的地方
我觉得应该还有更简单的算法