开灯问题。有n盏灯,编号1-n。第一个人把所有的灯打开,第二个人按下所有编号为二的倍数的开关(全关掉),第三个人按下所有编号为三的倍数的开关,以此类推。一共k个人,问最后开着的灯的编号。输入n和k,输出开着的灯的编号。k<n<1000。

  样例输入:

  7 3

  样例输出:

  1 5 6 7

 #include <iostream>

 using namespace std;

 int main()
{
int i,j,n,k;
cin>>n>>k;
int sta[];
for(i=; i<=n; i++) //先全部初始化
sta[i]=-;
for(i=; i<=k; i++) //有k个人
{
for(j=; j<=n; j++) //每个人都可以对所有的灯操作
{
if(j%i==)
{
sta[j]=-sta[j]; //操作时,状态反转
}
}
}
for(i=; i<=n; i++)
{
if(sta[i]==)
cout<<i<<" "; //如果状态是1,也就是开灯,则输出序号
}
cout<<"\b"; //此处强迫症福利
return ;
}
05-25 23:20