标题: 从猴子报数想到的 [打印本页] 作者: 蔡嘉 时间: 2012-10-2 11:48 标题: 从猴子报数想到的 为什么用currentIndex与monkey.count来比较?monkey.RemoveAt()与monkey.Remove()有什么区别呢?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace monkey
{
class Program
{
// //相传有一群猴子要选出大王,它们采用的方式为:所有猴子站成
//一个圈,然后从1开始报数,每当数到".
////"N的那一只猴子就出列,然后继续从下一个猴子开始又从1开始数,数
//到N的猴子继续出列,一直到最后".
////"剩的猴子就是大王了。 假如现在有M只猴子, 报数数为N, 请问第几只猴
//子是大王?列出选大王的过程。
static void Main(string[] args)
{
int m = 10;
int n = 3;
List<string> monkey = new List<string>();
for (int i = 1; i <= m; i++)
{
monkey.Add("m" + i);
//monkey.Remove(monkey[2]);
//Console.WriteLine(monkey[i]);
}
//Console.Read();
int currentIndex = 0;
while (true)
{
for (int i = 1; i <= n; i++)
{
if (i == n)
{
monkey.RemoveAt(currentIndex);
if (monkey.Count == 1)
{
Console.WriteLine(monkey[currentIndex]);
return;
}
}
currentIndex++;
if (currentIndex >= monkey.Count)
{
currentIndex = 0;
}
}
} 作者: 彭书雄 时间: 2012-10-2 14:07
currenIndex 是当前喊道指定数的索引值 如果索引值超过当前剩余猴子的数目就会出错,从而找不到最后一个猴子
楼上同学,程序没问题,跑过了,currentIndex随 i 的值同步增长,直到发现currentIndex的值大于等于猴的数量,回到索引初始位置,也即monkey[0]。忽然想到索引位置从零开始,所以对currentIndex先做自增,这样就和猴的数相匹配了,而不是总差1。(为么用currentIndex与monkey.count来比较?)
另外,请注意currentIndex采用camel命名法,不是全小写的!