編程題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;
}
}
}
}