开灯问题
问题描述:有N个灯,(每个灯只有一个开关,按一下开,再按一下关)来了K个人,第一个人把所有灯都打开,第二个人按下了所有编号为2的倍数的灯的开关,第三个人按下所有编号为3的倍数的灯的开关……按此规律。问最后那些灯亮着?
输入:7 3
输出:1 5 6 7
代码
using System;
namespace test
{
class Program
{
public static void Main(string[] args)
{
bool[] a=new bool[100];//灯开关的状态
Console.Write("输入灯的数目:");
int n=Convert.ToInt32(Console.ReadLine());
Console.Write("输入人数:");
int k=Convert.ToInt32(Console.ReadLine());
for (int i=1;i<=k;i++)
{
for (int j=1;j<=n;j++)
{
if (j % i == 0)
{
a[j] = !a[j];
}//end if
}//end for
}//end for
Console.Write("亮着的灯为:");
for (int i=1;i<=n;i++)
{
if(a[i])
{
Console.Write("{0} ",i);
}
}//end for
Console.WriteLine();
Console.WriteLine("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
namespace test
{
class Program
{
public static void Main(string[] args)
{
bool[] a=new bool[100];//灯开关的状态
Console.Write("输入灯的数目:");
int n=Convert.ToInt32(Console.ReadLine());
Console.Write("输入人数:");
int k=Convert.ToInt32(Console.ReadLine());
for (int i=1;i<=k;i++)
{
for (int j=1;j<=n;j++)
{
if (j % i == 0)
{
a[j] = !a[j];
}//end if
}//end for
}//end for
Console.Write("亮着的灯为:");
for (int i=1;i<=n;i++)
{
if(a[i])
{
Console.Write("{0} ",i);
}
}//end for
Console.WriteLine();
Console.WriteLine("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}