您的位置:首页 > 职场人生

【面试题】-100盏灯

2015-09-01 17:14 501 查看
一道挺有意思的逻辑题

房间里有100盏电灯,编号为1,2,3……100,每盏灯上有一个按钮,初始时灯全都是关的。
编好号的100位同学由房间外依次走进去,将自己编号的倍数的灯的按钮全部按一次,例如第一位同学把编号是1的倍数的灯的按钮按一下(此时100盏灯全亮),第二位同学把编号是2的倍数的灯的按钮按一下(此时只有50盏灯亮着,50盏被这个人按灭了)……第100位同学把编号是100的倍数的灯(即编号为100的灯)的按钮按一下,请问依次走完后,还有多少盏灯亮着?

public static void HundredTest()
{
Dictionary<int, bool> dataBase = new Dictionary<int, bool>();
for (int i = 1; i <= 100; i++)
{
dataBase.Add(i, false);
}

for (int i3 = 1; i3 <= 100; i3++)
{
for (int ii = 1; ii <= dataBase.Count; ii++)
{
if (ii % i3 == 0)
{
dataBase[ii] = dataBase[ii] == true ? false : true;
}
}
}
StringBuilder sb = new StringBuilder();
foreach (var item in dataBase)
{
if (item.Value == true)
{
sb.Append(item.Key.ToString() + ",");
}
}
Console.WriteLine(sb.ToString().Substring(0, sb.ToString().Length - 1));

}


代码很好写完,但是这个题目蕴含的数学理论挺好玩的,以下是别人的思路写的

1.对于每盏灯,拉动的次数是奇数时,灯就是亮着的,拉动的次数是偶数时,灯就是关着的。
2.每盏灯拉动的次数与它的编号所含约数的个数有关,它的编号有几个约数,这盏灯就被拉动几次。
3.1——100这100个数中有哪几个数,约数的个数是奇数。我们知道一个数的约数都是成对出现的,只有完全平方数约数的个数才是奇数个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: