开灯问题。有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 ;
}