/// <summary>
/// 直接调用这个方法,传入2个参数
/// </summary>
/// <param name="numberPerson">猴子的个数</param>
/// <param name="unluckyNumber">那个不幸的数字,也就是报到那个数字就要出局的</param>
/// <returns></returns>
private static int Play(int numberPerson, int unluckyNumber)
{
int i = 0; // 循环变量,作为数组的索引
int currentNumber = 0; // 报数计数
int numberRemain = numberPerson; // 剩下的人数
int numberWin = 0; // 赢的人的编号
// 声明数组,存放每个人的状态
bool[] personState = new bool[numberPerson];
// 游戏开始,每个人的状态都为true
for (i = 0; i < personState.Length; i++)
{
personState[i] = true;
}
// 开始游戏
while (numberRemain > 1)
{
for (i = 0; i < personState.Length; i++)
{
if (personState[i] == true) // 状态为true,报数
{
currentNumber++; // 报出的数字
if (currentNumber % unluckyNumber == 0)
{
personState[i] = false; // 报到幸运数字的倍数人退出
numberRemain--; // 退出的人数累加1
}
}
}
}
// 找到唯一一个没有退出的人,状态为true
for (i = 0; i < personState.Length; i++)
{
if (personState[i])
{
numberWin = i + 1;
break;
}
}
return numberWin;
}
有趣的C#数组问题:n只猴子选大王......,布布扣,bubuko.com
原文:http://www.cnblogs.com/Silly728/p/3573642.html