来上海快2周了,工作还没有着落。今天去一家公司面试,笔试题做的蛮好的,但是最后面试官问了一个问题,没答上来,然后就没戏了。
回去之后想想这个题的思路。题目是这样的:
100个人围成一个圈,各自的编号是1到100,编号是不变的,按照从1到100报数,报到5的倍数的出列,然后继续往下报,第一轮报完之后,再从编号为1的人从1开始报数,问最后剩下几个人的编号是多少?
好下面贴代码吧:
class Program
{
static void Main(string[] args)
{
ArrayList al = new ArrayList();
for (int i = 1; i <= 100;i++ )
{
al.Add(i);
}
int count = al.Count;
Dictionary<int, int> dic = new Dictionary<int, int>();
for (int i = 1; i <= 100;i++ )
{
dic.Add(i,i);
}
while(count>4)
{
foreach (int a in al)
{
if (a % 5 == 0)
{
count--;
dic.Remove(a);
}
}
Dictionary<int, int> dic2 = new Dictionary<int, int>();
int t = 1;
foreach (int key in dic.Keys)
{
dic2.Add(t,key);
t++;
if (t > dic.Keys.Count)
break;
}
al.Clear();
for (int i = 1; i <= count;i++ )
{
al.Add(i);
}
dic = dic2;
}
foreach(int r in dic.Keys)
{
Console.WriteLine(r);
}
Console.ReadKey();
}
}
这个题的思路最好是用Dictionary和hashtable做,面试的时候,我用的数组,然后直接被面试官鄙视了。
Dictionary字典是支持泛型的,hashtable不支持泛型,而且hashtable是倒叙输出的。