编程题1:有N个人围一圈依次报数,数到3的人出列,问当只剩一个人时他原来的位子在哪里?
// 转圈踢人游戏(约瑟夫环问题)
/* 1、构建数组 */
string[] persons = new string[10];
Random random = new Random();
for (int i = 0; i < persons.Length; i++)
{
persons[i] = String.Format("Person:{0}", random.Next(100));
}
int j = 0; /* 记录成员报数值,用于踢人 */
int count = 0; /* 记录被踢人员数,用于判断踢人结束 */
/* 2、开始转圈踢人 */
for (int i = 0; i < persons.Length; i = (i + 1) % persons.Length) /* i = (i + 1) % persons.Length 保证可以转圈,踢至最后一个人 */
{
if (persons[i] != "") /* 不为空,表示需要验证是否需要被踢出 */
{
j++;
if (j % 3 == 0) /* 表示报数为3的成员,进行踢出*/
{
persons[i] = ""; /* 踢出成功 */
count++; /* 被踢人数加1 */
//j = 0;
if (count == persons.Length) /* 最后一个被踢的人 */
{
Console.WriteLine("The last people is " + i);
break;
}
}
}
}